@jmanuelcorral/openteam 0.2.1 → 0.9.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/.opencode/command/openteam.md +2 -1
- package/.opencode/openteam.example.json +27 -8
- package/AGENTS.md +5 -2
- package/README.es.md +155 -59
- package/README.md +418 -62
- package/dist/capabilities/types.d.ts +3 -3
- package/dist/capabilities/types.d.ts.map +1 -1
- package/dist/classifier/localClassifier.d.ts +0 -2
- package/dist/classifier/localClassifier.d.ts.map +1 -1
- package/dist/cli/consoleServe.d.ts +30 -1
- package/dist/cli/consoleServe.d.ts.map +1 -1
- package/dist/cli/graphOperator.d.ts +22 -0
- package/dist/cli/graphOperator.d.ts.map +1 -0
- package/dist/cli/graphStatusSnapshot.d.ts +16 -0
- package/dist/cli/graphStatusSnapshot.d.ts.map +1 -0
- package/dist/cli/graphViewProvider.d.ts +30 -0
- package/dist/cli/graphViewProvider.d.ts.map +1 -0
- package/dist/cli/migrateAdapter.d.ts +12 -0
- package/dist/cli/migrateAdapter.d.ts.map +1 -0
- package/dist/cli/purgeAdapter.d.ts +10 -0
- package/dist/cli/purgeAdapter.d.ts.map +1 -0
- package/dist/cli/setupAdapters.d.ts.map +1 -1
- package/dist/cli.js +13480 -5176
- package/dist/commands/agents.d.ts +102 -2
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/baseline.d.ts.map +1 -1
- package/dist/commands/clearCache.d.ts +23 -0
- package/dist/commands/clearCache.d.ts.map +1 -0
- package/dist/commands/dispatch.d.ts +197 -4
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/doctor.d.ts +40 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/frontierCatalog.d.ts +8 -14
- package/dist/commands/frontierCatalog.d.ts.map +1 -1
- package/dist/commands/graph.d.ts +0 -27
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/local.d.ts.map +1 -1
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/purge.d.ts +132 -0
- package/dist/commands/purge.d.ts.map +1 -0
- package/dist/commands/report.d.ts +1 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/setup.d.ts +62 -5
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/config/errors.d.ts +10 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/legacyMigration.d.ts +82 -0
- package/dist/config/legacyMigration.d.ts.map +1 -0
- package/dist/config/legacyPaths.d.ts +105 -0
- package/dist/config/legacyPaths.d.ts.map +1 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/opencode.d.ts +63 -0
- package/dist/config/opencode.d.ts.map +1 -0
- package/dist/config/persist.d.ts +8 -0
- package/dist/config/persist.d.ts.map +1 -1
- package/dist/config/resolve.d.ts +1 -1
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/runtime.d.ts +62 -0
- package/dist/config/runtime.d.ts.map +1 -0
- package/dist/config/schema.d.ts +145 -77
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/console/assets.d.ts +2 -2
- package/dist/console/assets.d.ts.map +1 -1
- package/dist/console/configView.d.ts +74 -0
- package/dist/console/configView.d.ts.map +1 -0
- package/dist/console/opencodeClient.d.ts +8 -6
- package/dist/console/opencodeClient.d.ts.map +1 -1
- package/dist/console/protocol.d.ts +30 -6
- package/dist/console/protocol.d.ts.map +1 -1
- package/dist/console/render.d.ts +30 -1
- package/dist/console/render.d.ts.map +1 -1
- package/dist/console/types.d.ts +1 -1
- package/dist/console/types.d.ts.map +1 -1
- package/dist/context/redaction.d.ts +27 -19
- package/dist/context/redaction.d.ts.map +1 -1
- package/dist/context/schema.d.ts +26 -26
- package/dist/context/schema.d.ts.map +1 -1
- package/dist/context/types.d.ts +3 -3
- package/dist/contract/opencode.d.ts +39 -23
- package/dist/contract/opencode.d.ts.map +1 -1
- package/dist/graph/certificate.d.ts +37 -16
- package/dist/graph/certificate.d.ts.map +1 -1
- package/dist/graph/langgraph/adapter.d.ts +56 -0
- package/dist/graph/langgraph/adapter.d.ts.map +1 -0
- package/dist/graph/langgraph/certification.d.ts +64 -0
- package/dist/graph/langgraph/certification.d.ts.map +1 -0
- package/dist/graph/langgraph/checkpointReplay.d.ts +49 -0
- package/dist/graph/langgraph/checkpointReplay.d.ts.map +1 -0
- package/dist/graph/langgraph/checkpointer.d.ts +49 -0
- package/dist/graph/langgraph/checkpointer.d.ts.map +1 -0
- package/dist/graph/langgraph/engine.d.ts +34 -0
- package/dist/graph/langgraph/engine.d.ts.map +1 -0
- package/dist/graph/langgraph/graphModel.d.ts +37 -0
- package/dist/graph/langgraph/graphModel.d.ts.map +1 -0
- package/dist/graph/langgraph/reducer.d.ts +18 -0
- package/dist/graph/langgraph/reducer.d.ts.map +1 -0
- package/dist/graph/langgraph/retirement.d.ts +59 -0
- package/dist/graph/langgraph/retirement.d.ts.map +1 -0
- package/dist/graph/langgraph/types.d.ts +65 -0
- package/dist/graph/langgraph/types.d.ts.map +1 -0
- package/dist/graph/privacyPolicy.d.ts +7 -0
- package/dist/graph/privacyPolicy.d.ts.map +1 -1
- package/dist/graph/soakLedger.d.ts.map +1 -1
- package/dist/graph/types.d.ts +0 -2
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/index.d.ts +48 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11596 -4180
- package/dist/local/cacheAdapter.d.ts +7 -0
- package/dist/local/cacheAdapter.d.ts.map +1 -0
- package/dist/local/concurrency.d.ts +52 -0
- package/dist/local/concurrency.d.ts.map +1 -0
- package/dist/local/embeddings.d.ts +10 -10
- package/dist/local/embeddings.d.ts.map +1 -1
- package/dist/local/extractClient.d.ts +13 -10
- package/dist/local/extractClient.d.ts.map +1 -1
- package/dist/local/lemonade.d.ts +4 -0
- package/dist/local/lemonade.d.ts.map +1 -0
- package/dist/local/registry.d.ts +16 -0
- package/dist/local/registry.d.ts.map +1 -1
- package/dist/local/types.d.ts +1 -1
- package/dist/local/types.d.ts.map +1 -1
- package/dist/mcp/semanticRecall.d.ts +18 -1
- package/dist/mcp/semanticRecall.d.ts.map +1 -1
- package/dist/mcp/server.d.ts +41 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/memory/embedText.d.ts +4 -0
- package/dist/memory/embedText.d.ts.map +1 -0
- package/dist/memory/extract.d.ts +33 -18
- package/dist/memory/extract.d.ts.map +1 -1
- package/dist/memory/fold.d.ts +3 -2
- package/dist/memory/fold.d.ts.map +1 -1
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/inject.d.ts.map +1 -1
- package/dist/memory/log.d.ts +15 -4
- package/dist/memory/log.d.ts.map +1 -1
- package/dist/memory/merge.d.ts +18 -1
- package/dist/memory/merge.d.ts.map +1 -1
- package/dist/memory/traverse.d.ts +80 -0
- package/dist/memory/traverse.d.ts.map +1 -0
- package/dist/memory/types.d.ts +53 -7
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/messages/commands.d.ts +84 -0
- package/dist/messages/commands.d.ts.map +1 -0
- package/dist/messages/index.d.ts +46 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/opencodeArtifacts/index.d.ts +33 -0
- package/dist/opencodeArtifacts/index.d.ts.map +1 -0
- package/dist/opencodeArtifacts/orchestratorAgent.d.ts +29 -0
- package/dist/opencodeArtifacts/orchestratorAgent.d.ts.map +1 -0
- package/dist/opencodeArtifacts/slashCommand.d.ts +31 -0
- package/dist/opencodeArtifacts/slashCommand.d.ts.map +1 -0
- package/dist/orchestrator/coordinator.d.ts +188 -2
- package/dist/orchestrator/coordinator.d.ts.map +1 -1
- package/dist/orchestrator/graphCancellation.d.ts +40 -37
- package/dist/orchestrator/graphCancellation.d.ts.map +1 -1
- package/dist/orchestrator/graphEffects.d.ts +24 -24
- package/dist/orchestrator/graphEffects.d.ts.map +1 -1
- package/dist/orchestrator/graphFacade.d.ts +16 -16
- package/dist/orchestrator/graphFacade.d.ts.map +1 -1
- package/dist/orchestrator/graphIngress.d.ts +49 -45
- package/dist/orchestrator/graphIngress.d.ts.map +1 -1
- package/dist/orchestrator/graphReview.d.ts +24 -23
- package/dist/orchestrator/graphReview.d.ts.map +1 -1
- package/dist/orchestrator/graphRuntime.d.ts +27 -26
- package/dist/orchestrator/graphRuntime.d.ts.map +1 -1
- package/dist/orchestrator/graphShadow.d.ts +70 -69
- package/dist/orchestrator/graphShadow.d.ts.map +1 -1
- package/dist/orchestrator/opencodeSessionAdapter.d.ts +25 -25
- package/dist/orchestrator/opencodeSessionAdapter.d.ts.map +1 -1
- package/dist/orchestrator/permissions.d.ts.map +1 -1
- package/dist/orchestrator/ralphLoop.d.ts +57 -0
- package/dist/orchestrator/ralphLoop.d.ts.map +1 -0
- package/dist/orchestrator/roles.d.ts +50 -8
- package/dist/orchestrator/roles.d.ts.map +1 -1
- package/dist/orchestrator/roster.d.ts +103 -0
- package/dist/orchestrator/roster.d.ts.map +1 -0
- package/dist/orchestrator/rosterPersistence.d.ts +22 -0
- package/dist/orchestrator/rosterPersistence.d.ts.map +1 -0
- package/dist/orchestrator/runtimeSelection.d.ts +46 -0
- package/dist/orchestrator/runtimeSelection.d.ts.map +1 -0
- package/dist/orchestrator/sddCompiler.d.ts +34 -34
- package/dist/orchestrator/sddCompiler.d.ts.map +1 -1
- package/dist/orchestrator/sessionReconciler.d.ts +31 -29
- package/dist/orchestrator/sessionReconciler.d.ts.map +1 -1
- package/dist/orchestrator/shadowComparator.d.ts +23 -23
- package/dist/orchestrator/shadowComparator.d.ts.map +1 -1
- package/dist/orchestrator/subsessions.d.ts.map +1 -1
- package/dist/orchestrator/worktreeAdapter.d.ts +12 -12
- package/dist/orchestrator/worktreeAdapter.d.ts.map +1 -1
- package/dist/orchestrator/worktreeDispatch.d.ts +34 -34
- package/dist/orchestrator/worktreeDispatch.d.ts.map +1 -1
- package/dist/orchestrator/worktreeReconciler.d.ts +37 -36
- package/dist/orchestrator/worktreeReconciler.d.ts.map +1 -1
- package/dist/plugin/availability.d.ts.map +1 -1
- package/dist/plugin/capture.d.ts +12 -12
- package/dist/plugin/capture.d.ts.map +1 -1
- package/dist/plugin/commandTool.d.ts +1 -1
- package/dist/plugin/commandTool.d.ts.map +1 -1
- package/dist/plugin/graphShadowIngress.d.ts +50 -48
- package/dist/plugin/graphShadowIngress.d.ts.map +1 -1
- package/dist/plugin/graphTool.d.ts +25 -23
- package/dist/plugin/graphTool.d.ts.map +1 -1
- package/dist/plugin/hooks.d.ts +10 -10
- package/dist/plugin/hooks.d.ts.map +1 -1
- package/dist/plugin/legacyRunProducer.d.ts +22 -22
- package/dist/plugin/legacyRunProducer.d.ts.map +1 -1
- package/dist/plugin/memoryInject.d.ts +6 -6
- package/dist/plugin/memoryInject.d.ts.map +1 -1
- package/dist/plugin/memoryTool.d.ts +36 -0
- package/dist/plugin/memoryTool.d.ts.map +1 -0
- package/dist/plugin/orchestrateTool.d.ts +230 -0
- package/dist/plugin/orchestrateTool.d.ts.map +1 -0
- package/dist/plugin/reportRunSchema.d.ts +8 -8
- package/dist/plugin/reportRunSchema.d.ts.map +1 -1
- package/dist/plugin/sessionTracker.d.ts +15 -15
- package/dist/plugin/sessionTracker.d.ts.map +1 -1
- package/dist/plugin/shadowPipeline.d.ts +2 -1
- package/dist/plugin/shadowPipeline.d.ts.map +1 -1
- package/dist/plugin/soakObserver.d.ts +18 -11
- package/dist/plugin/soakObserver.d.ts.map +1 -1
- package/dist/plugin/toolcalls.d.ts +3 -3
- package/dist/router/chooseModel.d.ts.map +1 -1
- package/dist/router/frontierBaseline.d.ts +3 -3
- package/dist/router/modelSelection.d.ts +12 -4
- package/dist/router/modelSelection.d.ts.map +1 -1
- package/dist/router/types.d.ts +6 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/storage/graph/snapshot.d.ts.map +1 -1
- package/dist/storage/graph/soakRecorder.d.ts +14 -1
- package/dist/storage/graph/soakRecorder.d.ts.map +1 -1
- package/dist/storage/graph/workspaceLease.d.ts +1 -1
- package/dist/storage/graph/workspaceLease.d.ts.map +1 -1
- package/dist/storage/graph/worktreeRegistry.d.ts +1 -1
- package/dist/storage/graph/worktreeRegistry.d.ts.map +1 -1
- package/dist/storage/httpStorageProvider.d.ts +2 -2
- package/dist/storage/index/bunSqlite.d.ts +1 -0
- package/dist/storage/index/bunSqlite.d.ts.map +1 -1
- package/dist/storage/index/memoryConsolidate.d.ts +2 -0
- package/dist/storage/index/memoryConsolidate.d.ts.map +1 -1
- package/dist/storage/index/memoryEmbeddings.d.ts +51 -0
- package/dist/storage/index/memoryEmbeddings.d.ts.map +1 -0
- package/dist/storage/index/memoryIndex.d.ts +36 -4
- package/dist/storage/index/memoryIndex.d.ts.map +1 -1
- package/dist/storage/index/memoryRecall.d.ts +1 -1
- package/dist/storage/index/memoryRecall.d.ts.map +1 -1
- package/dist/storage/index/memoryRuntime.d.ts +2 -0
- package/dist/storage/index/memoryRuntime.d.ts.map +1 -1
- package/dist/storage/index/sqliteIndex.d.ts +18 -1
- package/dist/storage/index/sqliteIndex.d.ts.map +1 -1
- package/dist/storage/path.d.ts.map +1 -1
- package/dist/telemetry/aggregate.d.ts +12 -12
- package/dist/telemetry/aggregate.d.ts.map +1 -1
- package/dist/telemetry/cost.d.ts.map +1 -1
- package/dist/telemetry/decisions.d.ts +11 -11
- package/dist/telemetry/decisions.d.ts.map +1 -1
- package/dist/telemetry/eventLog.d.ts +41 -25
- package/dist/telemetry/eventLog.d.ts.map +1 -1
- package/dist/telemetry/events.d.ts +79 -34
- package/dist/telemetry/events.d.ts.map +1 -1
- package/dist/telemetry/fanout.d.ts +18 -0
- package/dist/telemetry/fanout.d.ts.map +1 -0
- package/dist/telemetry/graphProjection.d.ts +12 -12
- package/dist/telemetry/graphProjection.d.ts.map +1 -1
- package/dist/telemetry/graphRuntimeHealth.d.ts +26 -26
- package/dist/telemetry/graphRuntimeHealth.d.ts.map +1 -1
- package/dist/telemetry/graphView.d.ts +20 -20
- package/dist/telemetry/graphView.d.ts.map +1 -1
- package/dist/telemetry/otel.d.ts +86 -0
- package/dist/telemetry/otel.d.ts.map +1 -0
- package/dist/telemetry/otelConfig.d.ts +128 -0
- package/dist/telemetry/otelConfig.d.ts.map +1 -0
- package/dist/telemetry/otelExporter.d.ts +7 -0
- package/dist/telemetry/otelExporter.d.ts.map +1 -0
- package/dist/telemetry/read.d.ts +18 -4
- package/dist/telemetry/read.d.ts.map +1 -1
- package/dist/telemetry/types.d.ts +3 -2
- package/dist/telemetry/types.d.ts.map +1 -1
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/web/configApi.d.ts +154 -0
- package/dist/web/configApi.d.ts.map +1 -0
- package/dist/web/configRoute.d.ts +57 -0
- package/dist/web/configRoute.d.ts.map +1 -0
- package/dist/web/console.d.ts +8 -0
- package/dist/web/console.d.ts.map +1 -1
- package/dist/web/paths.d.ts +4 -3
- package/dist/web/paths.d.ts.map +1 -1
- package/dist/web/server.d.ts +30 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/start.d.ts +15 -0
- package/dist/web/start.d.ts.map +1 -1
- package/dist/web/storageRoute.d.ts +2 -2
- package/package.json +13 -7
- package/dist/cli/tunnel.d.ts +0 -89
- package/dist/cli/tunnel.d.ts.map +0 -1
- package/dist/commands/orchestratorAgent.d.ts +0 -30
- package/dist/commands/orchestratorAgent.d.ts.map +0 -1
- package/dist/commands/slashCommand.d.ts +0 -39
- package/dist/commands/slashCommand.d.ts.map +0 -1
- package/dist/orchestrator/ledger.d.ts +0 -28
- package/dist/orchestrator/ledger.d.ts.map +0 -1
- package/dist/storage/graph/importLegacy.d.ts +0 -62
- package/dist/storage/graph/importLegacy.d.ts.map +0 -1
- package/dist/storage/graph/migrateLegacyBriefs.d.ts +0 -32
- package/dist/storage/graph/migrateLegacyBriefs.d.ts.map +0 -1
- package/dist/storage/graph/migration.d.ts +0 -91
- package/dist/storage/graph/migration.d.ts.map +0 -1
- package/dist/storage/graph/projections.d.ts +0 -31
- package/dist/storage/graph/projections.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: openteam runtime commands (baseline show|set|auto, doctor, agents, console, report)
|
|
2
|
+
description: openteam runtime commands (baseline show|set|auto, doctor, agents, console, report, clear-cache)
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Use the `openteam` tool to execute the command indicated by the user: $ARGUMENTS
|
|
@@ -13,5 +13,6 @@ Interpret the arguments like this and call the `openteam` tool exactly once:
|
|
|
13
13
|
- `agents` → `action: "agents"`
|
|
14
14
|
- `console` → `action: "console"`
|
|
15
15
|
- `report` → `action: "report"`
|
|
16
|
+
- `clear-cache` → `action: "clear-cache"`
|
|
16
17
|
|
|
17
18
|
Return the tool output as-is, without reinterpreting it.
|
|
@@ -9,10 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"router": {
|
|
11
11
|
"mode": "balanced",
|
|
12
|
-
"localDefault":
|
|
13
|
-
"providerID": "ollama",
|
|
14
|
-
"modelID": "qwen3:8b"
|
|
15
|
-
},
|
|
12
|
+
"localDefault": null,
|
|
16
13
|
"trivialPromptMaxChars": 280,
|
|
17
14
|
"frontierPromptMinChars": 2000
|
|
18
15
|
},
|
|
@@ -20,7 +17,7 @@
|
|
|
20
17
|
"runtimes": [
|
|
21
18
|
{
|
|
22
19
|
"id": "ollama",
|
|
23
|
-
"enabled":
|
|
20
|
+
"enabled": false,
|
|
24
21
|
"baseURL": "http://localhost:11434/v1",
|
|
25
22
|
"defaultModel": {
|
|
26
23
|
"providerID": "ollama",
|
|
@@ -29,16 +26,25 @@
|
|
|
29
26
|
},
|
|
30
27
|
{
|
|
31
28
|
"id": "lmstudio",
|
|
32
|
-
"enabled":
|
|
29
|
+
"enabled": false,
|
|
33
30
|
"baseURL": "http://localhost:1234/v1",
|
|
34
31
|
"defaultModel": {
|
|
35
32
|
"providerID": "lmstudio",
|
|
36
33
|
"modelID": "qwen2.5-coder-local"
|
|
37
34
|
}
|
|
38
35
|
},
|
|
36
|
+
{
|
|
37
|
+
"id": "lemonade",
|
|
38
|
+
"enabled": false,
|
|
39
|
+
"baseURL": "http://localhost:8000/api/v1",
|
|
40
|
+
"defaultModel": {
|
|
41
|
+
"providerID": "lemonade",
|
|
42
|
+
"modelID": "Qwen3-Coder-30B-A3B-Instruct-GGUF"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
39
45
|
{
|
|
40
46
|
"id": "foundry-local",
|
|
41
|
-
"enabled":
|
|
47
|
+
"enabled": false,
|
|
42
48
|
"discovery": "cli",
|
|
43
49
|
"defaultModel": {
|
|
44
50
|
"providerID": "foundry-local",
|
|
@@ -55,8 +61,21 @@
|
|
|
55
61
|
},
|
|
56
62
|
"privacyMode": "forceLocalOnSensitive",
|
|
57
63
|
"graph": {
|
|
58
|
-
"mode": "
|
|
64
|
+
"mode": "shadow",
|
|
59
65
|
"killSwitch": false,
|
|
60
66
|
"operatorApproval": false
|
|
67
|
+
},
|
|
68
|
+
"orchestrator": {
|
|
69
|
+
"roles": {
|
|
70
|
+
"galadriel": {
|
|
71
|
+
"opencodeAgent": "galadriel",
|
|
72
|
+
"defaultTier": "moderate",
|
|
73
|
+
"minReasoningTier": 3,
|
|
74
|
+
"minCodeQualityTier": 3,
|
|
75
|
+
"needsToolCallingByDefault": true,
|
|
76
|
+
"preferredFrontierModels": [],
|
|
77
|
+
"localFirst": true
|
|
78
|
+
}
|
|
79
|
+
}
|
|
61
80
|
}
|
|
62
81
|
}
|
package/AGENTS.md
CHANGED
|
@@ -15,9 +15,11 @@ openteam is an opencode plugin built with **TypeScript + Bun** with **local-firs
|
|
|
15
15
|
- Read `docs/architecture.md`, `docs/testing-and-quality.md`, and `PLAN.md` before large changes.
|
|
16
16
|
- `router/` is pure: no I/O, clock, random, env vars, or logs.
|
|
17
17
|
- `plugin/` contains opencode hooks; any use of an undocumented surface needs a contract test.
|
|
18
|
-
- `local/` isolates Ollama, LM Studio, and Foundry Local.
|
|
18
|
+
- `local/` isolates Ollama, LM Studio, Lemonade Server, and Foundry Local.
|
|
19
19
|
- `config/` validates and persists `.opencode/openteam.json`.
|
|
20
20
|
- `telemetry/` does not store full prompts; it uses a hash and redacted metadata.
|
|
21
|
+
- `messages/` holds all user-facing text; it is pure and has no I/O.
|
|
22
|
+
- `opencodeArtifacts/` builds the `.opencode/agent/*.md` and `.opencode/command/*.md` content that opencode consumes. That prose is model-facing, not user-facing — do not extract it into the message catalog.
|
|
21
23
|
|
|
22
24
|
## opencode config and agents
|
|
23
25
|
|
|
@@ -32,6 +34,7 @@ openteam is an opencode plugin built with **TypeScript + Bun** with **local-firs
|
|
|
32
34
|
- Code, paths, types, and identifiers: English.
|
|
33
35
|
- TypeScript strict, ESM only, Zod at boundaries.
|
|
34
36
|
- Biome governs lint/format; do not introduce ESLint/Prettier unless a new decision is made.
|
|
37
|
+
- **Any string a user can read — CLI output, warnings, errors surfaced to the user, prompts — must live in `src/messages/`, not inlined at the call site.** Strings that are not user-facing (log keys, ids, file paths, protocol literals, SQL, test fixtures, model-facing artifact prose) stay where they are. Enforcement: `tests/contract/messages-catalog-ratchet.test.ts` (shared literal walker: `tests/contract/literalWalker.ts`) gates `*.ts` files under `src/commands/**` and `src/console/**` — the CLI output layer. It deliberately does not gate all of `src/**`; `src/storage/**`, `src/plugin/**` etc. carry SQL and model-prompt prose that a detector cannot distinguish from user text. Every gated file is in exactly one of two lists: **MIGRATED** (must contain zero detectable inline user-facing messages — gaining one fails the build) or **LEGACY** (not yet extracted — the list may only shrink; when a LEGACY file no longer has any detectable message the gate fails and tells you to promote it). A new `src/commands/**` or `src/console/**` file that appears in neither list also fails, forcing an explicit, reviewable choice. Adding a file to a list to turn a red build green is a fake fix — the gate's own error message says so. Note: MIGRATED means "no *detectable* inline message"; the detector is high-precision / lower-recall by design.
|
|
35
38
|
|
|
36
39
|
## Test-first with Gherkin
|
|
37
40
|
|
|
@@ -51,6 +54,6 @@ openteam is an opencode plugin built with **TypeScript + Bun** with **local-firs
|
|
|
51
54
|
## Non-negotiables
|
|
52
55
|
|
|
53
56
|
- No merge without tests, coverage, typecheck, lint/format, and determinism green.
|
|
54
|
-
-
|
|
57
|
+
- Privacy-sensitive tasks prefer local and are never misleadingly labelled. When `privacyMode` is `"forceLocalOnSensitive"` and a local runtime is configured, sensitive prompts stay local. When **no local runtime is configured**, they escalate to the frontier model, labelled `"frontier"` in telemetry, with rationale `"privacy-force-local-none-configured"` recorded. Hard blocking remains available via the `alwaysLocal` explicit override or the `blockFrontier` budget action. A startup warning fires when the privacy setting is inert (no local runtime configured).
|
|
55
58
|
- Do not hardcode a premium frontier as the baseline: use a configurable cheapest-capable one.
|
|
56
59
|
- Do not depend on real local runtimes, network, or secrets in CI.
|
package/README.es.md
CHANGED
|
@@ -35,7 +35,7 @@ El router mantiene una garantía de privacidad: con `privacyMode: "forceLocalOnS
|
|
|
35
35
|
## Características
|
|
36
36
|
|
|
37
37
|
- Routing por turno desde el hook `chat.message`, mutando `output.message.model` antes de que opencode persista el mensaje.
|
|
38
|
-
- Registro de runtimes locales OpenAI-compatible: Ollama, LM Studio y Foundry Local.
|
|
38
|
+
- Registro de runtimes locales OpenAI-compatible: Ollama, LM Studio, Lemonade Server y Foundry Local.
|
|
39
39
|
- Clasificador local JSON con fallback heurístico determinista.
|
|
40
40
|
- Perfiles de capacidad desde Models.dev, con cache y fallback curado cuando el catálogo no está disponible.
|
|
41
41
|
- Selección frontier **cheapest-capable** por coste blended `0.75 * inputUSD + 0.25 * outputUSD`.
|
|
@@ -46,12 +46,13 @@ El router mantiene una garantía de privacidad: con `privacyMode: "forceLocalOnS
|
|
|
46
46
|
|
|
47
47
|
## Requisitos
|
|
48
48
|
|
|
49
|
-
- opencode compatible con `@opencode-ai/plugin` `1.18.
|
|
49
|
+
- opencode compatible con `@opencode-ai/plugin` `1.18.19`.
|
|
50
50
|
- Bun `1.3.14` para instalaciones, desarrollo y tests reproducibles.
|
|
51
51
|
- Node.js `^22.22.2 || ^24.15.0 || >=26.0.0` para la CLI y el plugin publicados.
|
|
52
52
|
- Runtimes locales opcionales:
|
|
53
53
|
- Ollama en `http://localhost:11434/v1`.
|
|
54
54
|
- LM Studio en `http://localhost:1234/v1`.
|
|
55
|
+
- Lemonade Server en `http://localhost:8000/api/v1`.
|
|
55
56
|
- Foundry Local con puerto dinámico descubierto por CLI en Windows.
|
|
56
57
|
|
|
57
58
|
## Instalación
|
|
@@ -68,6 +69,8 @@ El paquete se publica como `@jmanuelcorral/openteam`. Estas son las rutas de ins
|
|
|
68
69
|
|
|
69
70
|
La instalación global con npm **no está soportada**. Bun es el único instalador de paquetes soportado. Node.js ejecuta la CLI y el plugin publicados dentro del rango declarado de engines; npm se limita a operaciones de mantenedor: `pack`, Trusted Publishing y `link:local`.
|
|
70
71
|
|
|
72
|
+
> **Ruta de GitHub Packages:** las versiones se publican tanto en npmjs como en GitHub Packages privado. Consulta [docs/es/guide/install-github-packages.md](docs/es/guide/install-github-packages.md) para el procedimiento de instalación autenticada desde GitHub Packages, configuración del PATH en zsh y verificación del proveedor Lemonade.
|
|
73
|
+
|
|
71
74
|
Para la carga directa desde opencode, basta con referenciar el paquete:
|
|
72
75
|
|
|
73
76
|
```jsonc
|
|
@@ -127,7 +130,7 @@ Para la carga directa desde opencode, basta con referenciar el paquete:
|
|
|
127
130
|
"privacyMode": "forceLocalOnSensitive",
|
|
128
131
|
"telemetry": {
|
|
129
132
|
"enabled": true,
|
|
130
|
-
"path": ".opencode/openteam-telemetry.jsonl"
|
|
133
|
+
"path": ".opencode/openteam-local/telemetry.jsonl"
|
|
131
134
|
}
|
|
132
135
|
}
|
|
133
136
|
]
|
|
@@ -187,7 +190,7 @@ Durante desarrollo puedes cargar un plugin local desde `.opencode/plugins/opente
|
|
|
187
190
|
}
|
|
188
191
|
},
|
|
189
192
|
"telemetry": {
|
|
190
|
-
"path": ".opencode/openteam-telemetry.jsonl"
|
|
193
|
+
"path": ".opencode/openteam-local/telemetry.jsonl"
|
|
191
194
|
}
|
|
192
195
|
}
|
|
193
196
|
]
|
|
@@ -197,10 +200,10 @@ Durante desarrollo puedes cargar un plugin local desde `.opencode/plugins/opente
|
|
|
197
200
|
|
|
198
201
|
## Quickstart: `openteam setup`
|
|
199
202
|
|
|
200
|
-
La forma más rápida de dejar un repositorio listo para opencode + openteam es el comando interactivo `openteam setup`. Detecta los runtimes locales instalados (Ollama, LM Studio, Foundry Local) —que son **opcionales**: puedes usar openteam **solo con frontier**, o apuntar a un Ollama/LM Studio que corra en **otra máquina de la red local**—, te deja elegir los modelos locales y el modelo **frontier baseline** (ordenados de más barato-capaz a más caro), y genera tres ficheros:
|
|
203
|
+
La forma más rápida de dejar un repositorio listo para opencode + openteam es el comando interactivo `openteam setup`. Detecta los runtimes locales instalados (Ollama, LM Studio, Lemonade Server, Foundry Local) —que son **opcionales**: puedes usar openteam **solo con frontier**, o apuntar a un Ollama/LM Studio/Lemonade Server que corra en **otra máquina de la red local**—, te deja elegir los modelos locales y el modelo **frontier baseline** (ordenados de más barato-capaz a más caro), y genera tres ficheros:
|
|
201
204
|
|
|
202
205
|
- `opencode.json` en la raíz: declara el plugin `@jmanuelcorral/openteam`, los `provider` locales OpenAI-compatible, el `model` frontier y el `small_model` local.
|
|
203
|
-
- `.opencode/openteam.json`: la configuración runtime validada de openteam (baseline, routing, runtimes locales y privacidad).
|
|
206
|
+
- `.opencode/openteam.json`: la configuración runtime validada de openteam (baseline, routing, runtimes locales, roles del orquestador y privacidad).
|
|
204
207
|
- `.opencode/agent/openteam.md`: el **agente primario `openteam`**, visible en el Tab-switcher.
|
|
205
208
|
|
|
206
209
|
```powershell
|
|
@@ -222,15 +225,15 @@ El asistente:
|
|
|
222
225
|
|
|
223
226
|
Tras `setup`, autentica el provider frontier (`opencode auth login`), asegúrate de que tu runtime local (en esta máquina o en la red) esté accesible si lo habilitaste, y abre opencode en el repositorio: openteam enruta local-first automáticamente. Puedes reajustar el baseline después con `openteam baseline set <provider/model>` o `openteam baseline auto`.
|
|
224
227
|
|
|
225
|
-
|
|
228
|
+
## El agente `openteam`
|
|
226
229
|
|
|
227
230
|
`openteam setup` genera un único **agente primario** llamado `openteam` (`.opencode/agent/openteam.md`). Pulsa **Tab** en opencode para seleccionarlo: así sabes explícitamente que estás en modo openteam, mientras el plugin sigue optimizando el modelo por debajo.
|
|
228
231
|
|
|
229
|
-
Ese orquestador **no trae subagentes precreados**. En **cada petición** su primera acción es comprobar si ya existe equipo (`.opencode/openteam
|
|
232
|
+
Ese orquestador **no trae subagentes precreados**. En **cada petición** su primera acción es comprobar si ya existe equipo (`.opencode/openteam/roster.md` + subagentes en `.opencode/agent/`). Si **existe**, reparte el trabajo entre los especialistas adecuados; si **no existe**, entiende las tareas que implica tu petición, diseña el equipo mínimo y **lo crea a demanda** —sin que tengas que pedírselo explícitamente— antes de pasarle esas tareas (escribiendo `.opencode/agent/<nombre>.md` con `mode: subagent`), reutilizando los existentes antes de crear nuevos. Los roles mecánicos/bulk se dejan enrutar a modelos locales y solo se escala a frontier para arquitectura, seguridad o debugging ambiguo. (Este modelo de equipo temático creado a demanda está inspirado en [Squad](https://bradygaster.github.io/squad/); ver [Agradecimientos](#agradecimientos-e-inspiración).)
|
|
230
233
|
|
|
231
|
-
El equipo tiene **identidad temática**: el orquestador elige (o te pregunta) un **universo** y nombra a cada agente con un personaje de ese universo, registrando el reparto en `.opencode/openteam
|
|
234
|
+
El equipo tiene **identidad temática**: el orquestador elige (o te pregunta) un **universo** y nombra a cada agente con un personaje de ese universo, registrando el reparto en `.opencode/openteam/roster.md` (fuera de `.opencode/agent/`, para que opencode no lo cargue como un agente fantasma) para que los nombres **persistan** entre sesiones. Además de los roles específicos del proyecto, contempla tres **roles estándar** creados a demanda:
|
|
232
235
|
|
|
233
|
-
- **scribe** — memoria silenciosa: registra decisiones y aprendizajes en `.opencode/openteam
|
|
236
|
+
- **scribe** — memoria silenciosa: registra decisiones y aprendizajes en `.opencode/openteam/decisions.md` sin tocar el código (modelo local).
|
|
234
237
|
- **ralph** — automatización y triage: monitoriza el trabajo pendiente, lo prioriza, coordina la ejecución y **escala al humano** ante bloqueos o aprobaciones.
|
|
235
238
|
- **guardian** — seguridad y privacidad: **detecta y enmascara datos sensibles** (PII, secretos, API keys, tokens) antes de que salgan a frontier y hace revisión de seguridad; corre siempre en local y respeta `forceLocalOnSensitive`.
|
|
236
239
|
|
|
@@ -302,19 +305,70 @@ Notas al actualizar:
|
|
|
302
305
|
|
|
303
306
|
La configuración runtime canónica vive en `.opencode/openteam.json`; este repositorio incluye `.opencode/openteam.example.json` como ejemplo completo. La forma validada por Zod es la de `src/config/schema.ts`. `telemetry` es una opción del plugin leída por `src/index.ts`, no parte del objeto `OpenTeamConfig` persistido.
|
|
304
307
|
|
|
308
|
+
Los archivos de configuración son estrictos: las claves desconocidas fallan
|
|
309
|
+
cerrado tanto en la CLI como en el plugin en vez de ignorarse en silencio. Los
|
|
310
|
+
errores nombran cada ruta rechazada (por ejemplo `router.trivialPromptMxChars`)
|
|
311
|
+
e incluyen una sugerencia de la clave más cercana cuando existe.
|
|
312
|
+
Esta validación estricta se aplica al archivo de configuración en ambas rutas;
|
|
313
|
+
las opciones programáticas del plugin son una superficie separada y aún no se
|
|
314
|
+
validan de forma estricta (#102). Las configs existentes sin `configVersion`
|
|
315
|
+
siguen siendo válidas porque openteam las migra a la versión actual antes de
|
|
316
|
+
validarlas.
|
|
317
|
+
|
|
318
|
+
### Resolución del archivo de configuración de opencode
|
|
319
|
+
|
|
320
|
+
openteam lee la configuración del proyecto opencode desde **dos rutas candidatas**
|
|
321
|
+
y las fusiona — igual que hace el propio opencode con múltiples archivos de config:
|
|
322
|
+
|
|
323
|
+
| Prioridad | Ruta |
|
|
324
|
+
| --- | --- |
|
|
325
|
+
| Mayor (prevalece) | `.opencode/opencode.json` |
|
|
326
|
+
| Base | `opencode.json` (raíz del proyecto) |
|
|
327
|
+
|
|
328
|
+
Las claves no conflictivas de ambos archivos se conservan. Cuando la misma
|
|
329
|
+
clave aparece en los dos, `.opencode/opencode.json` gana. Esto está verificado
|
|
330
|
+
contra opencode 1.18.18: un provider declarado en cualquiera de las dos
|
|
331
|
+
ubicaciones aparece en `opencode models --pure`.
|
|
332
|
+
|
|
333
|
+
**Comentarios JSONC** — los comentarios de línea (`//`) y de bloque (`/* … */`)
|
|
334
|
+
están permitidos en ambos archivos. El propio opencode los acepta; openteam los
|
|
335
|
+
elimina antes de parsear, así que un archivo con comentarios funciona igual que
|
|
336
|
+
uno JSON puro.
|
|
337
|
+
|
|
338
|
+
**Config malformada** — si uno de los archivos candidatos existe pero no puede
|
|
339
|
+
parsearse (JSON inválido, violación de schema), `doctor` y `agents` emiten un
|
|
340
|
+
aviso que nombra el archivo problemático y continúan en vez de abortar.
|
|
341
|
+
|
|
342
|
+
**Mensajes "provider not configured"** — nombran las dos rutas buscadas, para
|
|
343
|
+
que sepas de inmediato si el archivo no se encontró o si el provider está
|
|
344
|
+
genuinamente ausente en ambas ubicaciones.
|
|
345
|
+
|
|
346
|
+
**Ubicación de escritura de `openteam setup`** — al configurar un proyecto nuevo
|
|
347
|
+
(sin archivo de config opencode existente), `setup` escribe ahora en
|
|
348
|
+
`.opencode/opencode.json`. Cuando se detecta un archivo existente, se actualiza
|
|
349
|
+
en el mismo sitio — nunca se escribe en los dos a la vez. Usuarios que hacen
|
|
350
|
+
upgrade: si no existe un `opencode.json` en la raíz, una nueva ejecución de
|
|
351
|
+
`setup` escribirá en `.opencode/`.
|
|
352
|
+
|
|
353
|
+
**Sin traversal ascendente** — openteam lee únicamente las dos rutas candidatas
|
|
354
|
+
relativas al directorio de trabajo actual. No sube hasta la raíz git. Los
|
|
355
|
+
comandos están diseñados para ejecutarse desde la raíz del proyecto; si los
|
|
356
|
+
ejecutas desde un subdirectorio verás "provider not configured" y debes hacer
|
|
357
|
+
`cd` a la raíz primero.
|
|
358
|
+
|
|
305
359
|
| Key | Tipo | Default | Descripción |
|
|
306
360
|
| --- | --- | --- | --- |
|
|
307
361
|
| `baseline.mode` | `"auto" \| "pinned"` | `"auto"` | En `auto`, usa perfiles frontier cheapest-capable cuando se pasan al router; en `pinned`, usa `baseline.pinnedModel` si existe. |
|
|
308
362
|
| `baseline.pinnedModel` | `ModelRef \| null` | `null` | Modelo frontier fijado explícitamente. `ModelRef` usa `{ "providerID": string, "modelID": string }`. |
|
|
309
363
|
| `baseline.hardDefault` | `ModelRef` | `{ "providerID": "anthropic", "modelID": "claude-sonnet-4-5" }` | Fallback frontier si no hay perfiles cheapest-capable o pin válido. |
|
|
310
364
|
| `router.mode` | `"economy" \| "balanced" \| "quality"` | `"balanced"` | Modo de routing validado y reservado para política. |
|
|
311
|
-
| `router.localDefault` | `ModelRef` | `
|
|
365
|
+
| `router.localDefault` | `ModelRef \| null` | `null` | Modelo local principal. No configurado por defecto — ningún modelo local se enruta hasta que configures uno con `openteam setup` o manualmente. |
|
|
312
366
|
| `router.trivialPromptMaxChars` | `number` entero positivo | `280` | Prompts sin código hasta este tamaño prefieren local. |
|
|
313
367
|
| `router.frontierPromptMinChars` | `number` entero positivo | `2000` | Prompts desde este tamaño se tratan como candidatos a frontier si no aplican guards. |
|
|
314
|
-
| `local.runtimes` | `LocalRuntime[]` |
|
|
315
|
-
| `local.runtimes[].id` | `"ollama" \| "lmstudio" \| "foundry-local"` | requerido | Runtime local. |
|
|
368
|
+
| `local.runtimes` | `LocalRuntime[]` | `[]` | Runtimes locales a sondear. Vacío por defecto — ningún runtime está configurado hasta que ejecutes `openteam setup` o añadas una entrada manualmente. |
|
|
369
|
+
| `local.runtimes[].id` | `"ollama" \| "lmstudio" \| "foundry-local" \| "lemonade"` | requerido | Runtime local. |
|
|
316
370
|
| `local.runtimes[].enabled` | `boolean` | `true` | Habilita o deshabilita ese runtime. |
|
|
317
|
-
| `local.runtimes[].baseURL` | URL opcional | según runtime/config | Endpoint OpenAI-compatible `/v1
|
|
371
|
+
| `local.runtimes[].baseURL` | URL opcional | según runtime/config | Endpoint OpenAI-compatible (`/v1` para Ollama/LM Studio, `/api/v1` para Lemonade); Foundry Local puede omitirlo si usa discovery. |
|
|
318
372
|
| `local.runtimes[].discovery` | `"cli" \| "sdk" \| "manual"` opcional | sin default por item | Discovery de Foundry Local; el registry usa CLI si está configurado y no es `manual`. |
|
|
319
373
|
| `local.runtimes[].defaultModel` | `ModelRef` | requerido | Modelo por defecto de ese runtime. |
|
|
320
374
|
| `budgets.sessionUSD` | `number` positivo opcional | sin límite | Presupuesto frontier por sesión. |
|
|
@@ -322,8 +376,36 @@ La configuración runtime canónica vive en `.opencode/openteam.json`; este repo
|
|
|
322
376
|
| `budgets.frontierTokensPerSession` | `number` entero positivo opcional | sin límite | Límite de tokens frontier por sesión. |
|
|
323
377
|
| `budgets.hardStopOnBudgetExhaustion` | `boolean` | `false` | Si es `true`, agotar presupuesto devuelve `blockFrontier`; si es `false`, fuerza local. |
|
|
324
378
|
| `privacyMode` | `"forceLocalOnSensitive" \| "consentBeforeFrontier" \| "off"` | `"forceLocalOnSensitive"` | Política de privacidad para tareas sensibles. |
|
|
379
|
+
| `orchestrator.roles` | `Record<string, AgentRoleProfile>` | `{}` | Perfiles de rol personalizados o sobrescritos, indexados por role ID. Las entradas de config se validan con el mismo schema estricto que los roles integrados y tienen prioridad sobre `TEAM_ROLES`; si una entrada omite `roleID`, se usa la clave del mapa. Los roles desconocidos no declarados aquí siguen usando el fallback neutral y avisan una vez. |
|
|
380
|
+
| `orchestrator.roles.<role>.opencodeAgent` | `string` no vacío opcional | role ID | Nombre del agente opencode al que se despacha ese rol. |
|
|
381
|
+
| `orchestrator.roles.<role>.defaultTier` | `"trivial" \| "simple" \| "moderate" \| "hard"` | requerido | Tier base de complejidad antes de aplicar heurística y elevación por permisos. |
|
|
382
|
+
| `orchestrator.roles.<role>.minReasoningTier` | `1`–`5` | requerido | Capacidad mínima de razonamiento para candidatos frontier. |
|
|
383
|
+
| `orchestrator.roles.<role>.minCodeQualityTier` | `1`–`5` | requerido | Capacidad mínima de calidad de código para candidatos frontier. |
|
|
384
|
+
| `orchestrator.roles.<role>.needsToolCallingByDefault` | `boolean` | requerido | Si el rol requiere tool calling salvo que la tarea indique otra cosa. |
|
|
385
|
+
| `orchestrator.roles.<role>.preferredFrontierModels` | `Array<ModelRef \| "auto">` | requerido | Modelos frontier preferidos; usa `[]` para un rol local-first sin preferencia frontier explícita. |
|
|
386
|
+
| `orchestrator.roles.<role>.localFirst` | `boolean` | requerido | Si el rol conserva la postura local-first normal en vez de forzar frontier para tareas hard. |
|
|
325
387
|
| `telemetry.enabled` | `boolean` plugin option | `true` | Activa/desactiva escritura JSONL. |
|
|
326
|
-
| `telemetry.path` | `string` plugin option | `.opencode/openteam-telemetry.jsonl` | Ruta del log `CostRecord` JSONL. |
|
|
388
|
+
| `telemetry.path` | `string` plugin option | `.opencode/openteam-local/telemetry.jsonl` | Ruta del log `CostRecord` JSONL. |
|
|
389
|
+
|
|
390
|
+
Ejemplo de auditor de privacidad/seguridad personalizado:
|
|
391
|
+
|
|
392
|
+
```jsonc
|
|
393
|
+
{
|
|
394
|
+
"orchestrator": {
|
|
395
|
+
"roles": {
|
|
396
|
+
"galadriel": {
|
|
397
|
+
"opencodeAgent": "galadriel",
|
|
398
|
+
"defaultTier": "moderate",
|
|
399
|
+
"minReasoningTier": 3,
|
|
400
|
+
"minCodeQualityTier": 3,
|
|
401
|
+
"needsToolCallingByDefault": true,
|
|
402
|
+
"preferredFrontierModels": [],
|
|
403
|
+
"localFirst": true
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
```
|
|
327
409
|
|
|
328
410
|
## Uso
|
|
329
411
|
|
|
@@ -387,18 +469,20 @@ openteam baseline set openai/gpt-5-mini
|
|
|
387
469
|
openteam doctor --config .opencode/openteam.json
|
|
388
470
|
openteam agents
|
|
389
471
|
openteam console
|
|
390
|
-
openteam report --telemetry .opencode/openteam-telemetry.jsonl
|
|
472
|
+
openteam report --telemetry .opencode/openteam-local/telemetry.jsonl
|
|
391
473
|
openteam yolo status
|
|
392
474
|
openteam yolo on
|
|
393
475
|
openteam local status
|
|
394
476
|
openteam local off
|
|
477
|
+
openteam clear-cache
|
|
478
|
+
openteam clear-cache --delete
|
|
395
479
|
```
|
|
396
480
|
|
|
397
|
-
Flags: `--config <path>` y `--telemetry <path>` sobrescriben las rutas por defecto; `--opencode <path>` apunta el comando `yolo` a un `opencode.json` concreto.
|
|
481
|
+
Flags: `--config <path>` y `--telemetry <path>` sobrescriben las rutas por defecto; `--opencode <path>` apunta el comando `yolo` a un `opencode.json` concreto. Un `--config` explícito puede ser relativo o absoluto y debe poder leerse; solo la búsqueda por defecto de `.opencode/openteam.json` cae a los defaults integrados cuando falta.
|
|
398
482
|
|
|
399
483
|
### Ver el LLM de cada agente: `openteam agents`
|
|
400
484
|
|
|
401
|
-
Lista los agentes de `.opencode/agent/` indicando **qué LLM usa cada uno**: si es **local** (Ollama/LM Studio/Foundry, sin coste de tokens) o **frontier** (consume tu suscripción), y el **proveedor** (Anthropic, OpenAI, GitHub Copilot, Google…). Los agentes sin `model` propio **heredan** el default de `opencode.json` (que openteam enruta local-first por mensaje).
|
|
485
|
+
Lista los agentes de `.opencode/agent/` indicando **qué LLM usa cada uno**: si es **local** (Ollama/LM Studio/Lemonade/Foundry, sin coste de tokens) o **frontier** (consume tu suscripción), y el **proveedor** (Anthropic, OpenAI, GitHub Copilot, Google…). Los agentes sin `model` propio **heredan** el default de `opencode.json` (que openteam enruta local-first por mensaje).
|
|
402
486
|
|
|
403
487
|
```powershell
|
|
404
488
|
openteam agents
|
|
@@ -446,18 +530,38 @@ openteam local on # vuelve al routing local-first
|
|
|
446
530
|
|
|
447
531
|
Esto persiste el flag `router.frontierOnly` en `.opencode/openteam.json`. Con `frontierOnly` activo, el router escoge el **frontier cheapest-capable** en lugar de la heurística local-first, pero **respeta la privacidad, los presupuestos y los overrides explícitos por tarea**: los prompts sensibles con `forceLocalOnSensitive` no salen a frontier, y `local off` degrada esa política a `consentBeforeFrontier` (imposible forzar local sin runtime) informándote del cambio.
|
|
448
532
|
|
|
449
|
-
###
|
|
533
|
+
### Actualizar el plugin y limpiar la caché: `openteam clear-cache`
|
|
534
|
+
|
|
535
|
+
opencode almacena cada instalación de plugin en un directorio de caché y no
|
|
536
|
+
refresca las entradas existentes: no hay comparación de versión, TTL ni comando
|
|
537
|
+
de evicción en upstream. Publicar una nueva versión del plugin no tiene **ningún
|
|
538
|
+
efecto** en una máquina que ya tiene una entrada de caché. Borrar el directorio
|
|
539
|
+
de caché es la única vía de evicción que existe.
|
|
540
|
+
|
|
541
|
+
```powershell
|
|
542
|
+
openteam clear-cache # solo informe — imprime la tabla, no borra nada
|
|
543
|
+
openteam clear-cache --delete # borra todas las entradas de caché coincidentes
|
|
544
|
+
openteam clear-cache --cache-root <ruta> # sobreescribe el directorio raíz de caché
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
Alias de slash command dentro de opencode: `/openteam-clear-cache`
|
|
548
|
+
|
|
549
|
+
El modo por defecto (sin flags) imprime una tabla con columnas `spec dir`,
|
|
550
|
+
`spec-pinned`, `installed` y `mtime` para cada entrada de caché
|
|
551
|
+
`@jmanuelcorral/openteam*` encontrada. Solo se tocan entradas de ese scope.
|
|
552
|
+
Los symlinks y reparse points de Windows aparecen como `[SKIP — reparse point]`
|
|
553
|
+
y nunca se borran. En Windows, cierra opencode antes de ejecutar `--delete`
|
|
554
|
+
para evitar errores `[LOCKED]`.
|
|
555
|
+
|
|
556
|
+
Consulta [docs/es/guide/update-plugin.md](docs/es/guide/update-plugin.md)
|
|
557
|
+
para la explicación completa del mecanismo de congelamiento y el procedimiento
|
|
558
|
+
de actualización paso a paso.
|
|
450
559
|
|
|
451
|
-
|
|
560
|
+
### Modo desatendido: `openteam loop` (patrón Ralph) 🎯 *(`--dry-run` verificado; despacho real en diseño)*
|
|
452
561
|
|
|
453
|
-
|
|
562
|
+
Segundo modo de operación: un **bucle externo** que invoca `opencode run` contra un backlog persistente hasta vaciarlo, con contexto fresco por iteración y topes de seguridad (presupuesto, máx. iteraciones, sin-progreso). Complementa al orquestador interactivo, no lo sustituye. Como propiedad de seguridad, `openteam loop` **se niega a ejecutarse de forma desatendida sin confirmación explícita**: ejecutado sin argumentos imprime *"Refusing to run unattended without confirmation. Re-run with --dry-run to preview the plan, or --yes to run."* y termina con código distinto de cero; `openteam loop --dry-run` previsualiza el plan (backlog, topes de iteraciones y presupuesto, sleep, contexto fresco y condiciones de parada) sin despachar nada. La previsualización con `--dry-run` y la negativa al invocarlo sin argumentos están **verificadas contra el binario publicado**; el despacho desatendido real (`--yes`) **aún no está verificado de extremo a extremo y sigue en fase de diseño**. Consulta el diseño y los ejemplos en **[docs/loop.md](docs/loop.md)**.
|
|
454
563
|
|
|
455
|
-
|
|
456
|
-
> una funcionalidad **experimental** que todavía puede **rehacerse o
|
|
457
|
-
> reconstruirse**, con cambios incompatibles en su UI, endpoints, config (bloque
|
|
458
|
-
> `console`) y formato de eventos. El router, presupuestos, telemetría y el core
|
|
459
|
-
> de memoria son estables; la superficie web aún no. Úsala para observación
|
|
460
|
-
> local, no como API estable.
|
|
564
|
+
### Console web multi-sesión (se lanza desde la CLI)
|
|
461
565
|
|
|
462
566
|
openteam expone una **Console web local** que **lanzas tú desde la CLI** con
|
|
463
567
|
`openteam console`.
|
|
@@ -487,10 +591,12 @@ openteam console --open # además abre el navegador
|
|
|
487
591
|
openteam console --status # solo imprime la config (no lanza el servidor)
|
|
488
592
|
```
|
|
489
593
|
|
|
594
|
+
Consulta la [guía de la Console](docs/es/console.md) para la referencia completa.
|
|
595
|
+
|
|
490
596
|
Las sesiones se leen de:
|
|
491
597
|
|
|
492
598
|
```text
|
|
493
|
-
.opencode/openteam/sessions/*.jsonl
|
|
599
|
+
.opencode/openteam-local/sessions/*.jsonl
|
|
494
600
|
```
|
|
495
601
|
|
|
496
602
|
Puedes ajustar host/puerto y la terminal en `.opencode/openteam.json` (bloque
|
|
@@ -510,31 +616,11 @@ Puedes ajustar host/puerto y la terminal en `.opencode/openteam.json` (bloque
|
|
|
510
616
|
}
|
|
511
617
|
```
|
|
512
618
|
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
### Acceso remoto seguro: `openteam tunnel` — alfa
|
|
619
|
+
**Vista del grafo de agentes en vivo.** La Console también puede renderizar un **grafo de agentes** en vivo de una ejecución de Graph; está **desactivada por defecto** y se activa con `console.graphView.enabled: true` — consulta [Graph observability web](docs/es/guide/graph-observability-web.md) para la configuración y los requisitos completos.
|
|
516
620
|
|
|
517
|
-
>
|
|
518
|
-
> puede rehacerse o reconstruirse. Trata sus flags y comportamiento como
|
|
519
|
-
> inestables.
|
|
621
|
+
> **Seguridad**: el servidor escucha **solo en loopback** (`127.0.0.1`/`localhost`, validado por Zod) y **nunca expone prompts** (solo `promptHash`), args de toolcall ni contenido de mensajes: solo contadores, costes y resúmenes redactados. La vista "Sesión"/"Terminal" exige el token efímero. Si el puerto está ocupado y `autoPortFallback` es `true`, prueba el siguiente libre. El acceso remoto mediante `openteam tunnel` se **eliminó del MVP** (2026-08-31) y se redefinirá más adelante; la Console no tiene camino de exposición remota integrado.
|
|
520
622
|
|
|
521
|
-
|
|
522
|
-
`openteam tunnel` la expone vía **Microsoft Dev Tunnels** en lugar de bindear a
|
|
523
|
-
`0.0.0.0`. Comprueba que `devtunnel` esté instalado y con sesión iniciada,
|
|
524
|
-
hospeda el puerto de la Console e imprime la URL pública hasta **Ctrl+C**:
|
|
525
|
-
|
|
526
|
-
```powershell
|
|
527
|
-
openteam tunnel # expone solo la Console (observación), autenticado
|
|
528
|
-
openteam tunnel --terminal # además expone opencode para la terminal remota
|
|
529
|
-
openteam tunnel --allow-anonymous --yes # túnel anónimo (requiere doble confirmación)
|
|
530
|
-
```
|
|
531
|
-
|
|
532
|
-
> **Seguridad del túnel**: autenticado por defecto. La **terminal remota** exige
|
|
533
|
-
> `OPENCODE_SERVER_PASSWORD` definido; sin ella, `--terminal` se ignora y solo se
|
|
534
|
-
> expone la Console (observación). El túnel **anónimo** requiere `--yes` (doble
|
|
535
|
-
> confirmación) y avisa de que opencode puede ejecutar comandos y editar ficheros.
|
|
536
|
-
> Instala devtunnel con `winget install Microsoft.devtunnel` e inicia sesión con
|
|
537
|
-
> `devtunnel user login`.
|
|
623
|
+
**Estabilidad de la interfaz.** La superficie web de la Console es **pre-1.0**: su UI, sus endpoints, el bloque de configuración `console` y el formato de eventos pueden cambiar todavía. El router, los presupuestos, la telemetría y el core de memoria son estables.
|
|
538
624
|
|
|
539
625
|
### Memoria del equipo por MCP (solo lectura): `openteam mcp`
|
|
540
626
|
|
|
@@ -635,6 +721,12 @@ Invoke-RestMethod -Uri "http://localhost:11434/v1/models" -Method Get
|
|
|
635
721
|
Invoke-RestMethod -Uri "http://localhost:1234/v1/models" -Method Get
|
|
636
722
|
```
|
|
637
723
|
|
|
724
|
+
### Lemonade Server
|
|
725
|
+
|
|
726
|
+
```powershell
|
|
727
|
+
Invoke-RestMethod -Uri "http://localhost:8000/api/v1/models" -Method Get
|
|
728
|
+
```
|
|
729
|
+
|
|
638
730
|
### Foundry Local
|
|
639
731
|
|
|
640
732
|
```powershell
|
|
@@ -646,14 +738,14 @@ openteam extrae el puerto de la salida del CLI y normaliza el endpoint a `http:/
|
|
|
646
738
|
### Telemetría
|
|
647
739
|
|
|
648
740
|
```powershell
|
|
649
|
-
$telemetryPath = "C:\
|
|
741
|
+
$telemetryPath = "C:\ruta\a\tu\repo\.opencode\openteam-telemetry.jsonl"
|
|
650
742
|
Get-Content -Path $telemetryPath -Tail 5
|
|
651
743
|
```
|
|
652
744
|
|
|
653
745
|
### Verificación local
|
|
654
746
|
|
|
655
747
|
```powershell
|
|
656
|
-
Set-Location -Path "C:\
|
|
748
|
+
Set-Location -Path "C:\ruta\a\tu\repo"
|
|
657
749
|
bun test
|
|
658
750
|
bun run typecheck
|
|
659
751
|
bun run lint
|
|
@@ -669,7 +761,7 @@ lugar de la versión publicada (sin pasar por ningún registry), se enlaza el
|
|
|
669
761
|
paquete con un symlink global:
|
|
670
762
|
|
|
671
763
|
```powershell
|
|
672
|
-
Set-Location -Path "C:\
|
|
764
|
+
Set-Location -Path "C:\ruta\a\tu\repo"
|
|
673
765
|
bun run link:local # = bun run build && npm link
|
|
674
766
|
```
|
|
675
767
|
|
|
@@ -723,22 +815,26 @@ Gates no negociables:
|
|
|
723
815
|
|
|
724
816
|
## Compatibilidad
|
|
725
817
|
|
|
726
|
-
Consulta [docs/compatibility.md](docs/compatibility.md). Resumen verificado el `2026-08-
|
|
818
|
+
Consulta [docs/compatibility.md](docs/compatibility.md). Resumen verificado el `2026-08-24`:
|
|
727
819
|
|
|
728
820
|
| Superficie | Versión / contrato |
|
|
729
821
|
| --- | --- |
|
|
730
|
-
| openteam | `0.
|
|
731
|
-
| `@opencode-ai/plugin` | `1.18.
|
|
732
|
-
| `@opencode-ai/sdk` | `1.18.
|
|
822
|
+
| openteam | `0.9.0`; versión actual del paquete |
|
|
823
|
+
| `@opencode-ai/plugin` | `1.18.19` |
|
|
824
|
+
| `@opencode-ai/sdk` | `1.18.19` |
|
|
733
825
|
| Hook de routing | `chat.message`; no `chat.params` para cambiar modelo |
|
|
734
826
|
| Subsesiones | `client.session.create` + `client.session.prompt({ body: { model } })` |
|
|
735
827
|
|
|
828
|
+
## Contribuir
|
|
829
|
+
|
|
830
|
+
Las contribuciones son bienvenidas. Lee [CONTRIBUTING.md](CONTRIBUTING.md) para la configuración de desarrollo (Bun), las barreras de calidad no negociables, los límites de módulos (`router/` es puro — sin I/O, reloj, aleatoriedad ni logging) y el proceso de pull request. Al participar aceptas cumplir nuestro [Código de conducta](CODE_OF_CONDUCT.md).
|
|
831
|
+
|
|
736
832
|
## Roadmap
|
|
737
833
|
|
|
738
834
|
| Fase | Estado | Entregables |
|
|
739
835
|
| --- | --- | --- |
|
|
740
836
|
| 0. Scaffold/PoC | Hecha | TS/Bun, plugin mínimo, hook `chat.message`. |
|
|
741
|
-
| 1. Local registry + router heurístico | Hecha | Ollama/LM Studio/Foundry, probes y `chooseModel` determinista. |
|
|
837
|
+
| 1. Local registry + router heurístico | Hecha | Ollama/LM Studio/Lemonade/Foundry, probes y `chooseModel` determinista. |
|
|
742
838
|
| 2. Clasificador + perfiles + presupuesto + telemetría | Hecha | Clasificador local, `ModelCapabilityProfile`, budgets y `CostRecord`. |
|
|
743
839
|
| 3. Orquestación multiagente | Hecha | Coordinator, roles, child sessions y permisos. |
|
|
744
840
|
| 4. Empaquetado npm + docs | Hecha | Package exportable, README, ejemplos Windows y matriz de compatibilidad. |
|