zob-harness 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.pi/capabilities/zob-public-runtime-capabilities.json +4 -4
- package/.pi/extensions/zob-child-safety/AGENTS.md +12 -0
- package/.pi/extensions/zob-child-safety/index.ts +4 -105
- package/.pi/extensions/zob-child-safety/src/AGENTS.md +10 -0
- package/.pi/extensions/zob-child-safety/src/policy.ts +106 -0
- package/.pi/extensions/zob-harness/AGENTS.md +2 -0
- package/.pi/extensions/zob-harness/index.ts +94 -94
- package/.pi/extensions/zob-harness/src/AGENTS.md +4 -0
- package/.pi/extensions/zob-harness/src/core/AGENTS.md +24 -0
- package/.pi/extensions/zob-harness/src/{constants.ts → core/constants.ts} +10 -1
- package/.pi/extensions/zob-harness/src/core/utils/AGENTS.md +23 -0
- package/.pi/extensions/zob-harness/src/{utils → core/utils}/formatting.ts +1 -1
- package/.pi/extensions/zob-harness/src/{utils → core/utils}/records.ts +1 -1
- package/.pi/extensions/zob-harness/src/{utils → core/utils}/resources.ts +1 -1
- package/.pi/extensions/zob-harness/src/domains/AGENTS.md +23 -0
- package/.pi/extensions/zob-harness/src/domains/autonomy/AGENTS.md +21 -0
- package/.pi/extensions/zob-harness/src/{autonomous-runtime.ts → domains/autonomy/autonomous-runtime.ts} +22 -22
- package/.pi/extensions/zob-harness/src/{autonomy-readiness.ts → domains/autonomy/autonomy-readiness.ts} +18 -18
- package/.pi/extensions/zob-harness/src/{daemon-policy.ts → domains/autonomy/daemon-policy.ts} +6 -6
- package/.pi/extensions/zob-harness/src/{daemon-readiness.ts → domains/autonomy/daemon-readiness.ts} +7 -7
- package/.pi/extensions/zob-harness/src/{daemon-runtime.ts → domains/autonomy/daemon-runtime.ts} +2 -2
- package/.pi/extensions/zob-harness/src/{full-autonomy-test.ts → domains/autonomy/full-autonomy-test.ts} +4 -4
- package/.pi/extensions/zob-harness/src/{interactive-autonomy.ts → domains/autonomy/interactive-autonomy.ts} +2 -2
- package/.pi/extensions/zob-harness/src/{compute-profile.ts → domains/compute/compute-profile.ts} +3 -3
- package/.pi/extensions/zob-harness/src/{compute-workflow-shape.ts → domains/compute/compute-workflow-shape.ts} +3 -3
- package/.pi/extensions/zob-harness/src/domains/coms/AGENTS.md +21 -0
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/envelope.ts +2 -2
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/identity.ts +3 -3
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/ledger-bridge.ts +2 -2
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/local-transport.ts +1 -1
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/policy.ts +3 -3
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/presence.ts +1 -1
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/registry.ts +47 -4
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/response-capture.ts +1 -1
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/transcript-capture.ts +2 -2
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/zpeer-profile.ts +3 -3
- package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/zpeer.ts +35 -7
- package/.pi/extensions/zob-harness/src/{mission-control.ts → domains/coms/mission-control.ts} +12 -9
- package/.pi/extensions/zob-harness/src/{zagents.ts → domains/coms/zagents.ts} +86 -4
- package/.pi/extensions/zob-harness/src/domains/context/AGENTS.md +20 -0
- package/.pi/extensions/zob-harness/src/{context-gbrain.ts → domains/context/context-gbrain.ts} +4 -4
- package/.pi/extensions/zob-harness/src/domains/delegation/AGENTS.md +21 -0
- package/.pi/extensions/zob-harness/src/{agents.ts → domains/delegation/agents.ts} +2 -2
- package/.pi/extensions/zob-harness/src/{capabilities.ts → domains/delegation/capabilities.ts} +6 -6
- package/.pi/extensions/zob-harness/src/{child-runner.ts → domains/delegation/child-runner.ts} +8 -8
- package/.pi/extensions/zob-harness/src/{output-contracts.ts → domains/delegation/output-contracts.ts} +1 -1
- package/.pi/extensions/zob-harness/src/{prompt-packs.ts → domains/delegation/prompt-packs.ts} +4 -4
- package/.pi/extensions/zob-harness/src/domains/factory/AGENTS.md +21 -0
- package/.pi/extensions/zob-harness/src/{factory → domains/factory}/agentic-plan.ts +1 -1
- package/.pi/extensions/zob-harness/src/{factory-selector.ts → domains/factory/factory-selector.ts} +4 -4
- package/.pi/extensions/zob-harness/src/{factory → domains/factory}/quarantine.ts +5 -5
- package/.pi/extensions/zob-harness/src/{factory → domains/factory}/run.ts +5 -5
- package/.pi/extensions/zob-harness/src/{factory → domains/factory}/validation.ts +10 -10
- package/.pi/extensions/zob-harness/src/domains/git/AGENTS.md +20 -0
- package/.pi/extensions/zob-harness/src/{git-ops.ts → domains/git/git-ops.ts} +3 -3
- package/.pi/extensions/zob-harness/src/domains/goal/AGENTS.md +22 -0
- package/.pi/extensions/zob-harness/src/{goal-room.ts → domains/goal/goal-room.ts} +7 -7
- package/.pi/extensions/zob-harness/src/{goal-todo-imports.ts → domains/goal/goal-todo-imports.ts} +1 -1
- package/.pi/extensions/zob-harness/src/{goal-todo-types.ts → domains/goal/goal-todo-types.ts} +1 -1
- package/.pi/extensions/zob-harness/src/{goal-todos.ts → domains/goal/goal-todos.ts} +4 -4
- package/.pi/extensions/zob-harness/src/{goal.ts → domains/goal/goal.ts} +1 -1
- package/.pi/extensions/zob-harness/src/domains/governance/AGENTS.md +21 -0
- package/.pi/extensions/zob-harness/src/{budget-policy.ts → domains/governance/budget-policy.ts} +6 -6
- package/.pi/extensions/zob-harness/src/{governed-requests.ts → domains/governance/governed-requests.ts} +7 -7
- package/.pi/extensions/zob-harness/src/{launch-apply.ts → domains/governance/launch-apply.ts} +4 -4
- package/.pi/extensions/zob-harness/src/{merge-queue.ts → domains/governance/merge-queue.ts} +6 -6
- package/.pi/extensions/zob-harness/src/{rules.ts → domains/governance/rules.ts} +7 -7
- package/.pi/extensions/zob-harness/src/{safety.ts → domains/governance/safety.ts} +3 -3
- package/.pi/extensions/zob-harness/src/{sandbox.ts → domains/governance/sandbox.ts} +5 -5
- package/.pi/extensions/zob-harness/src/{worker-pool.ts → domains/governance/worker-pool.ts} +7 -7
- package/.pi/extensions/zob-harness/src/{workspace-claims.ts → domains/governance/workspace-claims.ts} +6 -6
- package/.pi/extensions/zob-harness/src/domains/models/AGENTS.md +20 -0
- package/.pi/extensions/zob-harness/src/{model-availability.ts → domains/models/model-availability.ts} +1 -1
- package/.pi/extensions/zob-harness/src/{model-routing.ts → domains/models/model-routing.ts} +6 -6
- package/.pi/extensions/zob-harness/src/domains/orchestration/AGENTS.md +21 -0
- package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/adaptive-delegation.ts +8 -8
- package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/adaptive-workflow.ts +4 -4
- package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/lead-plan.ts +5 -5
- package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/plan.ts +5 -5
- package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/room.ts +4 -4
- package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/run.ts +6 -6
- package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/supervised-readonly.ts +6 -6
- package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/widget-readers.ts +2 -2
- package/.pi/extensions/zob-harness/src/domains/project-dna/AGENTS.md +19 -0
- package/.pi/extensions/zob-harness/src/{project-dna.ts → domains/project-dna/project-dna.ts} +4 -4
- package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/candidate.ts +5 -5
- package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/coms.ts +3 -3
- package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/documentation.ts +4 -4
- package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/factory.ts +2 -2
- package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/temp-agent.ts +4 -4
- package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/write-lane.ts +3 -3
- package/.pi/extensions/zob-harness/src/domains/telemetry/AGENTS.md +19 -0
- package/.pi/extensions/zob-harness/src/{chronicle.ts → domains/telemetry/chronicle.ts} +3 -3
- package/.pi/extensions/zob-harness/src/{queue.ts → domains/telemetry/queue.ts} +7 -7
- package/.pi/extensions/zob-harness/src/{telemetry.ts → domains/telemetry/telemetry.ts} +4 -4
- package/.pi/extensions/zob-harness/src/{topology → domains/topology}/chains.ts +10 -10
- package/.pi/extensions/zob-harness/src/{topology → domains/topology}/coms.ts +3 -3
- package/.pi/extensions/zob-harness/src/{topology → domains/topology}/orchestration-profiles.ts +8 -8
- package/.pi/extensions/zob-harness/src/{topology → domains/topology}/teams.ts +8 -8
- package/.pi/extensions/zob-harness/src/runtime/adaptive-zmode.ts +2 -2
- package/.pi/extensions/zob-harness/src/runtime/auto-compaction.ts +2 -2
- package/.pi/extensions/zob-harness/src/runtime/commands.ts +51 -29
- package/.pi/extensions/zob-harness/src/runtime/compaction-policy.ts +2 -2
- package/.pi/extensions/zob-harness/src/runtime/delegation-feed.ts +1 -1
- package/.pi/extensions/zob-harness/src/runtime/delegation-monitor.ts +1 -1
- package/.pi/extensions/zob-harness/src/runtime/events.ts +53 -37
- package/.pi/extensions/zob-harness/src/{goal-runtime.ts → runtime/goal-runtime.ts} +9 -9
- package/.pi/extensions/zob-harness/src/runtime/goal-todo-overlay.ts +1 -1
- package/.pi/extensions/zob-harness/src/runtime/plan-capture.ts +2 -2
- package/.pi/extensions/zob-harness/src/runtime/state.ts +15 -13
- package/.pi/extensions/zob-harness/src/runtime/tools-autonomous.ts +2 -2
- package/.pi/extensions/zob-harness/src/runtime/tools-compute.ts +3 -3
- package/.pi/extensions/zob-harness/src/runtime/tools-coms.ts +15 -12
- package/.pi/extensions/zob-harness/src/runtime/tools-context.ts +2 -2
- package/.pi/extensions/zob-harness/src/runtime/tools-delegation.ts +13 -13
- package/.pi/extensions/zob-harness/src/runtime/tools-factory.ts +19 -19
- package/.pi/extensions/zob-harness/src/runtime/tools-goal-room.ts +3 -3
- package/.pi/extensions/zob-harness/src/runtime/tools-governed-requests.ts +3 -3
- package/.pi/extensions/zob-harness/src/runtime/tools-merge-queue.ts +3 -3
- package/.pi/extensions/zob-harness/src/runtime/tools-mission-control.ts +3 -3
- package/.pi/extensions/zob-harness/src/runtime/tools-orchestration.ts +9 -9
- package/.pi/extensions/zob-harness/src/runtime/tools-project-dna.ts +2 -2
- package/.pi/extensions/zob-harness/src/runtime/tools-worker-pool.ts +3 -3
- package/.pi/extensions/zob-harness/src/runtime/tools-workspace-claims.ts +3 -3
- package/.pi/extensions/zob-harness/src/runtime/tools-zcommit.ts +3 -3
- package/.pi/extensions/zob-harness/src/runtime/widget.ts +27 -10
- package/.pi/extensions/zob-harness/src/runtime/zobHarness.ts +1 -1
- package/.pi/extensions/zob-harness/src/types.ts +2 -2
- package/.pi/extensions/zob-switch/AGENTS.md +9 -0
- package/.pi/extensions/zob-switch/index.ts +9 -121
- package/.pi/extensions/zob-switch/src/AGENTS.md +8 -0
- package/.pi/extensions/zob-switch/src/autocomplete.ts +12 -0
- package/.pi/extensions/zob-switch/src/paths.ts +8 -0
- package/.pi/extensions/zob-switch/src/settings.ts +25 -0
- package/.pi/extensions/zob-switch/src/snapshot.ts +34 -0
- package/.pi/extensions/zob-switch/src/state.ts +57 -0
- package/.pi/factories/agentic-spec-team/README.md +35 -0
- package/.pi/factories/agentic-spec-team/batch-manifest.json +11 -0
- package/.pi/factories/agentic-spec-team/example-agentic-spec-manifest.json +19 -0
- package/.pi/factories/agentic-spec-team/factory.json +98 -0
- package/.pi/factories/agentic-spec-team/pilot-manifest.json +11 -0
- package/.pi/factories/agentic-spec-team/schemas/final-report.schema.json +15 -0
- package/.pi/factories/agentic-spec-team/schemas/manifest.schema.json +14 -0
- package/.pi/factories/agentic-spec-team/schemas/question.schema.json +18 -0
- package/.pi/factories/agentic-spec-team/schemas/source-register.schema.json +11 -0
- package/.pi/factories/agentic-spec-team/schemas/traceability.schema.json +11 -0
- package/.pi/factories/agentic-spec-team/smoke-manifest.json +11 -0
- package/.pi/skills/zob-agentic-spec-team/SKILL.md +148 -0
- package/.pi/skills/zob-coms-safety/SKILL.md +13 -0
- package/.pi/skills/zob-coms-v2-live/SKILL.md +11 -0
- package/.pi/skills/zob-factory/SKILL.md +21 -0
- package/.pi/skills/zob-harness/SKILL.md +14 -0
- package/.pi/skills/zob-split-refactor/SKILL.md +1 -1
- package/.pi/skills/zob-zagent-creator/SKILL.md +266 -12
- package/.pi/zagents/agent-factory-pacman-chief.json +22 -0
- package/.pi/zagents/agent-factory-pacman-engine-builder.json +21 -0
- package/.pi/zagents/agent-factory-pacman-frontend-builder.json +21 -0
- package/.pi/zagents/agent-factory-pacman-game-architect.json +21 -0
- package/.pi/zagents/agent-factory-pacman-game-designer.json +21 -0
- package/.pi/zagents/agent-factory-pacman-qa-oracle.json +21 -0
- package/.pi/zagents/bdd-writer.json +20 -0
- package/.pi/zagents/data-profile-analyst.json +20 -0
- package/.pi/zagents/domain-modeler.json +20 -0
- package/.pi/zagents/planner-handoff-writer.json +20 -0
- package/.pi/zagents/prompts/agent-factory-pacman-chief.md +53 -0
- package/.pi/zagents/prompts/agent-factory-pacman-engine-builder.md +41 -0
- package/.pi/zagents/prompts/agent-factory-pacman-frontend-builder.md +40 -0
- package/.pi/zagents/prompts/agent-factory-pacman-game-architect.md +41 -0
- package/.pi/zagents/prompts/agent-factory-pacman-game-designer.md +43 -0
- package/.pi/zagents/prompts/agent-factory-pacman-qa-oracle.md +51 -0
- package/.pi/zagents/prompts/agentic-spec-run-role.md +30 -0
- package/.pi/zagents/source-intake-steward.json +20 -0
- package/.pi/zagents/spec-chief.json +21 -0
- package/.pi/zagents/spec-oracle.json +20 -0
- package/.pi/zagents/spec-writer.json +20 -0
- package/.pi/zagents/ux-flow-analyst.json +20 -0
- package/.pi/zteams/agent-factory-pacman-multiplayer-runtime.mjs +384 -0
- package/.pi/zteams/agent-factory-pacman-multiplayer.json +42 -0
- package/.pi/zteams/agent-factory-pacman-multiplayer.tmux.sh +256 -0
- package/.pi/zteams/agentic-spec-run.json +42 -0
- package/.pi/zteams/agentic-spec-run.tmux.sh +134 -0
- package/.pi/zteams/templates/agent-factory-pacman-chief-kickoff.template.md +71 -0
- package/.pi/zteams/templates/agent-factory-pacman-worker-kickoff.template.md +59 -0
- package/README.md +183 -110
- package/SOURCE_INDEX.md +5 -1
- package/examples/agent-factory-mission-control/AGENTS.md +10 -0
- package/examples/agent-factory-mission-control/README.md +17 -0
- package/examples/agent-factory-mission-control/apps/api/AGENTS.md +3 -0
- package/examples/agent-factory-mission-control/apps/dashboard/AGENTS.md +3 -0
- package/examples/agent-factory-mission-control/mission.md +3 -0
- package/examples/agent-factory-mission-control/output-contract.md +3 -0
- package/examples/agent-factory-mission-control/packages/domain/AGENTS.md +3 -0
- package/examples/agent-factory-mission-control/packages/snapshot-reader/AGENTS.md +3 -0
- package/examples/agent-factory-pacman-multiplayer/AGENTS.md +27 -0
- package/examples/agent-factory-pacman-multiplayer/README.md +84 -0
- package/examples/agent-factory-pacman-multiplayer/mission.md +43 -0
- package/examples/agent-factory-pacman-multiplayer/output-contract.md +58 -0
- package/examples/agent-factory-tmux-comms/README.md +146 -0
- package/examples/agent-factory-tmux-comms/chief-kickoff.template.md +54 -0
- package/examples/agent-factory-tmux-comms/simple-agent-factory.team.json +92 -0
- package/examples/agent-factory-tmux-comms/simple-agent-factory.tmux.sh +248 -0
- package/examples/agent-factory-tmux-comms/worker-kickoff.template.md +43 -0
- package/package.json +17 -3
- package/scripts/README.md +1 -1
- package/scripts/agentic-spec-team/validate-bdd.mjs +13 -0
- package/scripts/agentic-spec-team/validate-final-report.mjs +14 -0
- package/scripts/agentic-spec-team/validate-manifest.mjs +14 -0
- package/scripts/agentic-spec-team/validate-oracle-ready.mjs +13 -0
- package/scripts/agentic-spec-team/validate-question-loop.mjs +15 -0
- package/scripts/agentic-spec-team/validate-run.mjs +11 -0
- package/scripts/agentic-spec-team/validate-source-register.mjs +17 -0
- package/scripts/agentic-spec-team/validate-traceability.mjs +20 -0
- package/scripts/agentic-spec-team/validate-workgraph.mjs +13 -0
- package/scripts/autonomy/mission-readiness-secret-smoke.mjs +5 -5
- package/scripts/git-ops/commit-policy-smoke.mjs +5 -4
- package/scripts/goal-todo/child-goal-ref-smoke.mjs +2 -2
- package/scripts/path-policy/validate-smoke.mjs +3 -3
- package/scripts/project-dna/AGENTS.md +39 -0
- package/scripts/project-dna/{validate-scaffold.mjs → validation/validate-scaffold.mjs} +7 -7
- package/scripts/spec-run.mjs +365 -0
- package/scripts/worker-pool/static-smoke.mjs +5 -5
- package/scripts/zagent-static-smoke.mjs +35 -6
- package/scripts/zpeer-local-e2e-smoke.mjs +12 -5
- package/scripts/zpeer-static-smoke.mjs +17 -17
- /package/.pi/extensions/zob-harness/src/{types → core/types}/core.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{utils → core/utils}/hashing.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{utils → core/utils}/json.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{utils → core/utils}/paths.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/AGENTS.md +0 -0
- /package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/pending-replies.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/types.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/ledger.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/types.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/validate.ts +0 -0
- /package/.pi/extensions/zob-harness/src/{schemas-project-dna.ts → runtime/schemas-project-dna.ts} +0 -0
- /package/.pi/extensions/zob-harness/src/{schemas.ts → runtime/schemas.ts} +0 -0
- /package/scripts/project-dna/{bench-smoke.mjs → benchmark/bench-smoke.mjs} +0 -0
- /package/scripts/project-dna/{build-capsules.mjs → capsules/build-capsules.mjs} +0 -0
- /package/scripts/project-dna/{emit-golden-cases.mjs → emit/emit-golden-cases.mjs} +0 -0
- /package/scripts/project-dna/{emit-ontology.mjs → emit/emit-ontology.mjs} +0 -0
- /package/scripts/project-dna/{oracle-review-smoke.mjs → oracle/oracle-review-smoke.mjs} +0 -0
- /package/scripts/project-dna/{query-context.mjs → query/query-context.mjs} +0 -0
- /package/scripts/project-dna/{query-steward.mjs → query/query-steward.mjs} +0 -0
- /package/scripts/project-dna/{build-sample-spec.mjs → sample/build-sample-spec.mjs} +0 -0
- /package/scripts/project-dna/{generate-sample.mjs → sample/generate-sample.mjs} +0 -0
- /package/scripts/project-dna/{validate-sample-project.mjs → sample/validate-sample-project.mjs} +0 -0
- /package/scripts/project-dna/{scan.mjs → scan/scan.mjs} +0 -0
- /package/scripts/project-dna/{validate-scan-artifacts.mjs → scan/validate-scan-artifacts.mjs} +0 -0
- /package/scripts/project-dna/{validate-5of5.mjs → validation/validate-5of5.mjs} +0 -0
- /package/scripts/project-dna/{validate-golden-cases.mjs → validation/validate-golden-cases.mjs} +0 -0
- /package/scripts/project-dna/{validate-ontology.mjs → validation/validate-ontology.mjs} +0 -0
- /package/scripts/project-dna/{plan-workflow.mjs → workflow/plan-workflow.mjs} +0 -0
- /package/scripts/project-dna/{validate-workflow.mjs → workflow/validate-workflow.mjs} +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { appendFileSync, existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
|
|
4
|
-
import { loadProjectAgents } from "../agents.js";
|
|
5
|
-
import { BLOCKED_CHAIN_TOOLS, READ_ONLY_CHAIN_TOOLS } from "
|
|
6
|
-
import { validateOutputContractId } from "../output-contracts.js";
|
|
7
|
-
import { validateToolList } from "../safety.js";
|
|
8
|
-
import type { ChainDefinition, ChainRunInput, ChainRunResult, ChainStepDefinition } from "
|
|
9
|
-
import { sha256 } from "
|
|
10
|
-
import { parseJsonFile } from "
|
|
11
|
-
import { isSafeArtifactName, safeFileStem, safeRunId } from "
|
|
12
|
-
import { isRecord } from "
|
|
13
|
-
import { listZobResourceJsonStems, readableZobResourcePath } from "
|
|
4
|
+
import { loadProjectAgents } from "../delegation/agents.js";
|
|
5
|
+
import { BLOCKED_CHAIN_TOOLS, READ_ONLY_CHAIN_TOOLS } from "../../core/constants.js";
|
|
6
|
+
import { validateOutputContractId } from "../delegation/output-contracts.js";
|
|
7
|
+
import { validateToolList } from "../governance/safety.js";
|
|
8
|
+
import type { ChainDefinition, ChainRunInput, ChainRunResult, ChainStepDefinition } from "../../types.js";
|
|
9
|
+
import { sha256 } from "../../core/utils/hashing.js";
|
|
10
|
+
import { parseJsonFile } from "../../core/utils/json.js";
|
|
11
|
+
import { isSafeArtifactName, safeFileStem, safeRunId } from "../../core/utils/paths.js";
|
|
12
|
+
import { isRecord } from "../../core/utils/records.js";
|
|
13
|
+
import { listZobResourceJsonStems, readableZobResourcePath } from "../../core/utils/resources.js";
|
|
14
14
|
import { isStringArray } from "./teams.js";
|
|
15
15
|
|
|
16
16
|
function chainsDir(repoRoot: string): string {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { appendFileSync, mkdirSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
|
|
4
|
-
import type { TeamDefinition, ZobComsMessageInput } from "
|
|
5
|
-
import { sha256 } from "
|
|
6
|
-
import { readJsonl } from "
|
|
4
|
+
import type { TeamDefinition, ZobComsMessageInput } from "../../types.js";
|
|
5
|
+
import { sha256 } from "../../core/utils/hashing.js";
|
|
6
|
+
import { readJsonl } from "../../core/utils/json.js";
|
|
7
7
|
|
|
8
8
|
function comsDir(repoRoot: string): string {
|
|
9
9
|
return join(repoRoot, ".pi", "coms");
|
package/.pi/extensions/zob-harness/src/{topology → domains/topology}/orchestration-profiles.ts
RENAMED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
|
|
4
|
-
import { loadProjectAgents } from "../agents.js";
|
|
4
|
+
import { loadProjectAgents } from "../delegation/agents.js";
|
|
5
5
|
import { normalizeAdaptiveDelegationPolicy, validateAdaptiveDelegationPolicy } from "../orchestration/adaptive-delegation.js";
|
|
6
|
-
import { validateOutputContractId } from "../output-contracts.js";
|
|
7
|
-
import { validateAllowedPathPolicy, validateDelegateTaskWriteScope, validateForbiddenPathPolicy, validateToolList } from "../safety.js";
|
|
8
|
-
import type { OrchestrateRunInput, OrchestrationProfileDefinition, OrchestrationProfilePhase, OrchestrationProfileRole, TeamDefinition } from "
|
|
9
|
-
import { parseJsonFile } from "
|
|
10
|
-
import { isSafeArtifactName, safeFileStem } from "
|
|
11
|
-
import { isRecord } from "
|
|
12
|
-
import { listZobResourceJsonStems, readableZobResourcePath } from "
|
|
6
|
+
import { validateOutputContractId } from "../delegation/output-contracts.js";
|
|
7
|
+
import { validateAllowedPathPolicy, validateDelegateTaskWriteScope, validateForbiddenPathPolicy, validateToolList } from "../governance/safety.js";
|
|
8
|
+
import type { OrchestrateRunInput, OrchestrationProfileDefinition, OrchestrationProfilePhase, OrchestrationProfileRole, TeamDefinition } from "../../types.js";
|
|
9
|
+
import { parseJsonFile } from "../../core/utils/json.js";
|
|
10
|
+
import { isSafeArtifactName, safeFileStem } from "../../core/utils/paths.js";
|
|
11
|
+
import { isRecord } from "../../core/utils/records.js";
|
|
12
|
+
import { listZobResourceJsonStems, readableZobResourcePath } from "../../core/utils/resources.js";
|
|
13
13
|
import { isStringArray, loadTeamDefinition, validateTeamDefinition } from "./teams.js";
|
|
14
14
|
|
|
15
15
|
function orchestrationProfilesDir(repoRoot: string): string {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
|
|
4
|
-
import { loadProjectAgents } from "../agents.js";
|
|
5
|
-
import { validateOutputContractId } from "../output-contracts.js";
|
|
6
|
-
import { validateToolList } from "../safety.js";
|
|
7
|
-
import type { HarnessAgent, TeamDefinition, TeamLead, TeamRoleBase, TeamWorker } from "
|
|
8
|
-
import { parseJsonFile } from "
|
|
9
|
-
import { isSafeArtifactName, safeFileStem } from "
|
|
10
|
-
import { isRecord } from "
|
|
11
|
-
import { readableZobResourcePath } from "
|
|
4
|
+
import { loadProjectAgents } from "../delegation/agents.js";
|
|
5
|
+
import { validateOutputContractId } from "../delegation/output-contracts.js";
|
|
6
|
+
import { validateToolList } from "../governance/safety.js";
|
|
7
|
+
import type { HarnessAgent, TeamDefinition, TeamLead, TeamRoleBase, TeamWorker } from "../../types.js";
|
|
8
|
+
import { parseJsonFile } from "../../core/utils/json.js";
|
|
9
|
+
import { isSafeArtifactName, safeFileStem } from "../../core/utils/paths.js";
|
|
10
|
+
import { isRecord } from "../../core/utils/records.js";
|
|
11
|
+
import { readableZobResourcePath } from "../../core/utils/resources.js";
|
|
12
12
|
|
|
13
13
|
function isStringArray(value: unknown): value is string[] {
|
|
14
14
|
return Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ModeName } from "../types.js";
|
|
2
|
-
import { sha256 } from "../utils/hashing.js";
|
|
3
|
-
import { isRecord } from "../utils/records.js";
|
|
2
|
+
import { sha256 } from "../core/utils/hashing.js";
|
|
3
|
+
import { isRecord } from "../core/utils/records.js";
|
|
4
4
|
|
|
5
5
|
export type AdaptiveZmodeAlias = "orchestrator";
|
|
6
6
|
|
|
@@ -2,8 +2,8 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import type { CompactionResult, ExtensionAPI, ExtensionContext, SessionEntry } from "@earendil-works/pi-coding-agent";
|
|
3
3
|
import { compact, estimateTokens, findCutPoint } from "@earendil-works/pi-coding-agent";
|
|
4
4
|
|
|
5
|
-
import { sha256 } from "../utils/hashing.js";
|
|
6
|
-
import { isRecord } from "../utils/records.js";
|
|
5
|
+
import { sha256 } from "../core/utils/hashing.js";
|
|
6
|
+
import { isRecord } from "../core/utils/records.js";
|
|
7
7
|
import { buildZobCompactionInstructions, withZobCompactionDetails, ZOB_COMPACTION_TARGET_TOKENS, type ZobCompactionDetails } from "./compaction-policy.js";
|
|
8
8
|
import type { HarnessRuntimeState } from "./state.js";
|
|
9
9
|
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import type { AutocompleteItem } from "@earendil-works/pi-tui";
|
|
3
3
|
|
|
4
|
-
import { MODE_PROMPTS } from "../constants.js";
|
|
4
|
+
import { MODE_PROMPTS } from "../core/constants.js";
|
|
5
5
|
import type { ModeName, QueueTickResult } from "../types.js";
|
|
6
|
-
import { discoverAgents, formatAgentList } from "../agents.js";
|
|
7
|
-
import { buildComputePreview, resolveComputeProfile, type ComputeRequestedProfile } from "../compute-profile.js";
|
|
8
|
-
import { buildComputeWorkflowShape } from "../compute-workflow-shape.js";
|
|
9
|
-
import { buildDaemonRuntimeState, buildDaemonTickPlan, type DaemonRuntimeState, type DaemonTickPlan } from "../daemon-runtime.js";
|
|
10
|
-
import { runQueueDaemonTick } from "../queue.js";
|
|
11
|
-
import { buildProjectDnaAgenticPlan, buildProjectDnaQueryResult, buildProjectDnaReadinessAudit } from "../project-dna.js";
|
|
12
|
-
import { formatZagentList, formatZteamList, listZagentManifests, listZteamManifests, loadZagentManifest, loadZteamManifest, normalizeZagentRoomBindings, readZagentPrompt, type ZAgentManifest, type ZAgentRoomBinding, type ZTeamAgentManifest, type ZTeamManifest, type ZTeamMemberManifest } from "../zagents.js";
|
|
6
|
+
import { discoverAgents, formatAgentList } from "../domains/delegation/agents.js";
|
|
7
|
+
import { buildComputePreview, resolveComputeProfile, type ComputeRequestedProfile } from "../domains/compute/compute-profile.js";
|
|
8
|
+
import { buildComputeWorkflowShape } from "../domains/compute/compute-workflow-shape.js";
|
|
9
|
+
import { buildDaemonRuntimeState, buildDaemonTickPlan, type DaemonRuntimeState, type DaemonTickPlan } from "../domains/autonomy/daemon-runtime.js";
|
|
10
|
+
import { runQueueDaemonTick } from "../domains/telemetry/queue.js";
|
|
11
|
+
import { buildProjectDnaAgenticPlan, buildProjectDnaQueryResult, buildProjectDnaReadinessAudit } from "../domains/project-dna/project-dna.js";
|
|
12
|
+
import { formatZagentList, formatZteamList, listZagentManifests, listZteamManifests, loadZagentManifest, loadZteamManifest, normalizeZagentRoomBindings, readZagentPrompt, resolveZagentRuntimeRoomBindings, type ZAgentManifest, type ZAgentRoomBinding, type ZTeamAgentManifest, type ZTeamManifest, type ZTeamMemberManifest } from "../domains/coms/zagents.js";
|
|
13
13
|
import { resolveAdaptiveZmodeEntrypoint, renderAdaptiveZmodeTemplate } from "./adaptive-zmode.js";
|
|
14
14
|
import { handleZcompactCommand } from "./auto-compaction.js";
|
|
15
|
-
import { sha256 } from "../utils/hashing.js";
|
|
16
|
-
import { buildZcommitPlan, formatZcommitPlan, formatZcommitStatus, readZcommitPolicy, runGovernedZcommitAdopt, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitAdoptResult, type ZcommitCommandResult, type ZcommitOwnedPathRef, type ZcommitToggleState } from "../git-ops.js";
|
|
17
|
-
import { clearZpeerNewCarryoverProfile, writeZpeerLocalProfileFromPeer } from "../coms-v2/zpeer-profile.js";
|
|
18
|
-
import { buildZpeerRoomSummary, changeZpeerAlias, changeZpeerRoom, clearZpeerRoom, joinZpeerRoom, leaveZpeerRoom, peerAliasInRoom, refreshZpeerSelf, sendZpeerPrompt, useZpeerRoom, zpeerMembershipsForPeer, type ZpeerSendMode } from "../coms-v2/zpeer.js";
|
|
15
|
+
import { sha256 } from "../core/utils/hashing.js";
|
|
16
|
+
import { buildZcommitPlan, formatZcommitPlan, formatZcommitStatus, readZcommitPolicy, runGovernedZcommitAdopt, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitAdoptResult, type ZcommitCommandResult, type ZcommitOwnedPathRef, type ZcommitToggleState } from "../domains/git/git-ops.js";
|
|
17
|
+
import { clearZpeerNewCarryoverProfile, writeZpeerLocalProfileFromPeer } from "../domains/coms/coms-v2/zpeer-profile.js";
|
|
18
|
+
import { buildZpeerRoomSummary, changeZpeerAlias, changeZpeerRoom, clearZpeerRoom, joinZpeerRoom, leaveZpeerRoom, peerAliasInRoom, refreshZpeerSelf, sendZpeerPrompt, useZpeerRoom, zpeerMembershipsForPeer, type ZpeerSendMode } from "../domains/coms/coms-v2/zpeer.js";
|
|
19
19
|
import { markZpeerNewHardResetPending } from "./events.js";
|
|
20
|
-
import { parseBillableJobIntake, validateBillableJobIntake } from "../goal.js";
|
|
21
|
-
import { handleGoalCommand, handleGoalGateCommand, pauseRuntimeGoalForStop } from "
|
|
22
|
-
import { formatRuleResolution, resolveRuleProfile } from "../rules.js";
|
|
23
|
-
import { formatContractTemplate } from "../safety.js";
|
|
20
|
+
import { parseBillableJobIntake, validateBillableJobIntake } from "../domains/goal/goal.js";
|
|
21
|
+
import { handleGoalCommand, handleGoalGateCommand, pauseRuntimeGoalForStop } from "./goal-runtime.js";
|
|
22
|
+
import { formatRuleResolution, resolveRuleProfile } from "../domains/governance/rules.js";
|
|
23
|
+
import { formatContractTemplate } from "../domains/governance/safety.js";
|
|
24
24
|
import { showDelegationOverlay } from "./delegation-overlay.js";
|
|
25
25
|
import { finishDelegationRun } from "./delegation-monitor.js";
|
|
26
26
|
import { showGoalTodoOverlay } from "./goal-todo-overlay.js";
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
scoreMissionReadiness,
|
|
34
34
|
toAutonomyStateLedgerEntry,
|
|
35
35
|
toMissionReadinessLedgerEntry,
|
|
36
|
-
} from "../interactive-autonomy.js";
|
|
36
|
+
} from "../domains/autonomy/interactive-autonomy.js";
|
|
37
37
|
import { applyMode, renderHarnessWidget } from "./widget.js";
|
|
38
38
|
|
|
39
39
|
const COMPUTE_PROFILES = ["auto", "low", "medium", "high", "xhigh", "max"] as const;
|
|
@@ -598,6 +598,7 @@ function formatZagentShow(loaded: ReturnType<typeof loadZagentManifest>): string
|
|
|
598
598
|
loaded.manifest.team ? `team: ${loaded.manifest.team}` : undefined,
|
|
599
599
|
loaded.manifest.role ? `role: ${loaded.manifest.role}` : undefined,
|
|
600
600
|
loaded.manifest.alias ? `alias: @${loaded.manifest.alias}` : undefined,
|
|
601
|
+
loaded.manifest.defaultMode ? `defaultMode: ${loaded.manifest.defaultMode}` : undefined,
|
|
601
602
|
rooms.length ? `rooms: ${rooms.map((room) => `${room.id}${room.alias ? `@${room.alias}` : ""}${room.active ? "*" : ""}`).join(", ")}` : "rooms: none",
|
|
602
603
|
loaded.manifest.promptRef ? `promptRef: ${loaded.manifest.promptRef}` : "promptRef: none",
|
|
603
604
|
loaded.promptPath ? `promptPath: ${loaded.promptPath}` : undefined,
|
|
@@ -627,7 +628,7 @@ function normalizeZpeerRole(role: string | undefined): "member" | "bridge" | "ob
|
|
|
627
628
|
|
|
628
629
|
async function applyZagentToZpeer(repoRoot: string, peer: NonNullable<HarnessRuntimeState["zobLive"]["peerCard"]>, manifest: ZAgentManifest): Promise<{ ok: true; peer: NonNullable<HarnessRuntimeState["zobLive"]["peerCard"]> } | { ok: false; reason: string; peer: NonNullable<HarnessRuntimeState["zobLive"]["peerCard"]> }> {
|
|
629
630
|
let current = refreshZpeerSelf(repoRoot, peer);
|
|
630
|
-
const rooms =
|
|
631
|
+
const rooms = resolveZagentRuntimeRoomBindings(repoRoot, manifest).rooms;
|
|
631
632
|
if (rooms.length === 0 && manifest.alias) {
|
|
632
633
|
const changed = await changeZpeerAlias(repoRoot, current, manifest.alias);
|
|
633
634
|
if (!changed.ok) return { ok: false, reason: changed.reason, peer: current };
|
|
@@ -663,25 +664,44 @@ function zteamMembers(team: ZTeamManifest): Array<{ id: string; alias?: string;
|
|
|
663
664
|
}));
|
|
664
665
|
}
|
|
665
666
|
|
|
666
|
-
function
|
|
667
|
+
function safeLaunchPlanModel(value: string | undefined): string | undefined {
|
|
668
|
+
const trimmed = value?.trim();
|
|
669
|
+
if (!trimmed || trimmed.length > 160) return undefined;
|
|
670
|
+
if (trimmed.includes("\0") || trimmed.includes("\n") || trimmed.includes("\r") || trimmed.includes("..")) return undefined;
|
|
671
|
+
if (trimmed.startsWith("/") || trimmed.startsWith("~")) return undefined;
|
|
672
|
+
return /^[a-zA-Z0-9._:/+@-]+$/.test(trimmed) ? trimmed : undefined;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
function zteamLaunchPlanText(repoRoot: string, team: ZTeamManifest): { text: string; roomIds: string[]; agentIds: string[]; modelIds: string[]; defaultModes: string[] } {
|
|
667
676
|
const teamRooms = normalizeZagentRoomBindings(team.rooms, team.defaultRoom, team.activeRoom).map((room) => room.id);
|
|
668
677
|
const members = zteamMembers(team);
|
|
669
678
|
const roomIds = [...new Set([...teamRooms, ...members.flatMap((member) => (member.rooms ?? []).map((room) => room.id))])];
|
|
670
679
|
const agentIds = members.map((member) => member.id);
|
|
680
|
+
const loadedAgents = members.map((member) => ({ member, loaded: loadZagentManifest(repoRoot, member.id) }));
|
|
681
|
+
const modelIds = [...new Set(loadedAgents.map(({ loaded }) => safeLaunchPlanModel(loaded.manifest.model)).filter((model): model is string => Boolean(model)))];
|
|
682
|
+
const defaultModes = [...new Set(loadedAgents.map(({ loaded }) => loaded.manifest.defaultMode).filter((mode): mode is ModeName => Boolean(mode)))];
|
|
671
683
|
const lines = [
|
|
672
684
|
`# ZTeam launch-plan: ${team.id}`,
|
|
673
685
|
"No processes spawned. Copy/paste each command in a separate terminal when approved.",
|
|
674
686
|
"",
|
|
675
|
-
...
|
|
687
|
+
...loadedAgents.map(({ member, loaded }) => {
|
|
688
|
+
const rawModel = loaded.manifest.model;
|
|
689
|
+
const model = safeLaunchPlanModel(rawModel);
|
|
690
|
+
const defaultMode = loaded.manifest.defaultMode;
|
|
676
691
|
const rooms = (member.rooms ?? []).map((room) => `${room.id}${room.active ? "*" : ""}`).join(", ") || teamRooms.join(", ") || "default";
|
|
677
692
|
const alias = member.alias ? ` alias=@${member.alias}` : "";
|
|
678
|
-
|
|
693
|
+
const modelArg = model ? ` --model ${model}` : "";
|
|
694
|
+
const modelNote = rawModel ? (model ? ` model=${model}` : " model=invalid_omitted") : "";
|
|
695
|
+
const modeNote = defaultMode ? ` defaultMode=${defaultMode}` : "";
|
|
696
|
+
return `ZOB_ZAGENT_ID=${member.id} pi${modelArg} # expected_rooms=${rooms}${alias}${modelNote}${modeNote}`;
|
|
679
697
|
}),
|
|
680
698
|
"",
|
|
681
699
|
`Expected rooms: ${roomIds.join(", ") || "default"}`,
|
|
700
|
+
modelIds.length ? `Models: ${modelIds.join(", ")}` : "Models: default Pi model unless each ZAgent manifest sets a safe model",
|
|
701
|
+
defaultModes.length ? `Default modes: ${defaultModes.join(", ")}` : "Default modes: restored/current ZOB mode unless each ZAgent manifest sets defaultMode",
|
|
682
702
|
"After each session starts, run /zagent use <id> to bind its ZPeer alias/rooms.",
|
|
683
703
|
];
|
|
684
|
-
return { text: lines.join("\n"), roomIds, agentIds };
|
|
704
|
+
return { text: lines.join("\n"), roomIds, agentIds, modelIds, defaultModes };
|
|
685
705
|
}
|
|
686
706
|
|
|
687
707
|
function delegationArgumentCompletions(state: HarnessRuntimeState, prefix: string): AutocompleteItem[] | null {
|
|
@@ -874,11 +894,13 @@ export function registerHarnessCommands(pi: ExtensionAPI, state: HarnessRuntimeS
|
|
|
874
894
|
}
|
|
875
895
|
const loaded = loadZagentManifest(ctx.cwd, id);
|
|
876
896
|
const prompt = readZagentPrompt(ctx.cwd, loaded.manifest.promptRef);
|
|
877
|
-
const
|
|
897
|
+
const resolved = resolveZagentRuntimeRoomBindings(ctx.cwd, loaded.manifest);
|
|
898
|
+
const rooms = resolved.rooms;
|
|
878
899
|
const errors = [...loaded.errors, ...prompt.errors];
|
|
879
900
|
state.zagent = {
|
|
880
901
|
id: loaded.manifest.id,
|
|
881
|
-
team: loaded.manifest.team,
|
|
902
|
+
team: loaded.manifest.team ?? resolved.teamIds[0],
|
|
903
|
+
teams: resolved.teamIds,
|
|
882
904
|
role: loaded.manifest.role,
|
|
883
905
|
alias: loaded.manifest.alias,
|
|
884
906
|
description: loaded.manifest.description,
|
|
@@ -967,11 +989,11 @@ export function registerHarnessCommands(pi: ExtensionAPI, state: HarnessRuntimeS
|
|
|
967
989
|
return;
|
|
968
990
|
}
|
|
969
991
|
const loaded = loadZteamManifest(ctx.cwd, id);
|
|
970
|
-
const plan = zteamLaunchPlanText(loaded.manifest);
|
|
992
|
+
const plan = zteamLaunchPlanText(ctx.cwd, loaded.manifest);
|
|
971
993
|
pi.appendEntry("zob-zagent", zagentLedgerEntry("zteam_launch_plan", { teamId: loaded.manifest.id, status: loaded.errors.length === 0 ? "ok" : "blocked", roomIds: plan.roomIds, path: loaded.path, errors: loaded.errors }));
|
|
972
994
|
renderHarnessWidget(pi, state, ctx);
|
|
973
|
-
void pi.sendMessage({ customType: "zob-zteam-launch-plan", content: loaded.errors.length ? `${plan.text}\n\nBlocked manifest errors:\n- ${loaded.errors.join("\n- ")}` : plan.text, display: true, details: { id: loaded.manifest.id, agentIdHashes: plan.agentIds.map((agentId) => sha256(agentId)), roomIdHashes: plan.roomIds.map((roomId) => sha256(roomId)), bodyStored: false } }, { triggerTurn: false });
|
|
974
|
-
ctx.ui.notify(`zteam ${loaded.manifest.id} launch-plan printed; spawn count=0; expectedRooms=${plan.roomIds.join(",") || "default"}`, loaded.errors.length === 0 ? "info" : "warning");
|
|
995
|
+
void pi.sendMessage({ customType: "zob-zteam-launch-plan", content: loaded.errors.length ? `${plan.text}\n\nBlocked manifest errors:\n- ${loaded.errors.join("\n- ")}` : plan.text, display: true, details: { id: loaded.manifest.id, agentIdHashes: plan.agentIds.map((agentId) => sha256(agentId)), roomIdHashes: plan.roomIds.map((roomId) => sha256(roomId)), modelIdHashes: plan.modelIds.map((modelId) => sha256(modelId)), defaultModeHashes: plan.defaultModes.map((mode) => sha256(mode)), bodyStored: false } }, { triggerTurn: false });
|
|
996
|
+
ctx.ui.notify(`zteam ${loaded.manifest.id} launch-plan printed; spawn count=0; expectedRooms=${plan.roomIds.join(",") || "default"}; models=${plan.modelIds.length || "default"}; defaultModes=${plan.defaultModes.length || "current"}`, loaded.errors.length === 0 ? "info" : "warning");
|
|
975
997
|
return;
|
|
976
998
|
}
|
|
977
999
|
ctx.ui.notify("Usage: /zteam list | /zteam show <id> | /zteam launch-plan <id>", "warning");
|
|
@@ -1010,9 +1032,9 @@ export function registerHarnessCommands(pi: ExtensionAPI, state: HarnessRuntimeS
|
|
|
1010
1032
|
});
|
|
1011
1033
|
emitZpeerEvent({ kind: "status", roomId: summary.roomId, fromAlias: summary.selfAlias, status: `online=${summary.online}/${summary.peerCount}`, reason: `stale=${summary.stale} offline=${summary.offline}` });
|
|
1012
1034
|
renderHarnessWidget(pi, state, ctx);
|
|
1013
|
-
const availableAliases = summary.
|
|
1035
|
+
const availableAliases = summary.onlineAliases.filter((alias) => alias !== summary.selfAlias).map((alias) => `@${alias}`).join(", ") || "none";
|
|
1014
1036
|
const unavailable = summary.stale + summary.offline;
|
|
1015
|
-
ctx.ui.notify(`zpeer room=${summary.roomId} memberships=${summary.membershipCount ?? zpeerMembershipsForPeer(self).length} self=@${summary.selfAlias ?? "?"} onlinePeers=${Math.max(0, summary.online - 1)} unavailable=${unavailable}
|
|
1037
|
+
ctx.ui.notify(`zpeer room=${summary.roomId} memberships=${summary.membershipCount ?? zpeerMembershipsForPeer(self).length} self=@${summary.selfAlias ?? "?"} onlinePeers=${Math.max(0, summary.online - 1)} unavailable=${unavailable} livePeers=${availableAliases} · usage: /zpeer @alias <prompt> | /zpeer in <room> @alias <prompt> · safety: local-only/hash-only/bodyStored=false`, "info");
|
|
1016
1038
|
return;
|
|
1017
1039
|
}
|
|
1018
1040
|
const parts = trimmed.split(/\s+/);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CompactionResult } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
|
|
3
|
-
import { goalTodoCompletionDiagnostics, summarizeGoalTodos } from "../goal-todos.js";
|
|
4
|
-
import { sha256 } from "../utils/hashing.js";
|
|
3
|
+
import { goalTodoCompletionDiagnostics, summarizeGoalTodos } from "../domains/goal/goal-todos.js";
|
|
4
|
+
import { sha256 } from "../core/utils/hashing.js";
|
|
5
5
|
import type { HarnessRuntimeState } from "./state.js";
|
|
6
6
|
|
|
7
7
|
export const ZOB_COMPACTION_ENTRY_TYPE = "zob-compaction";
|
|
@@ -5,7 +5,7 @@ import { Markdown, truncateToWidth, visibleWidth, type MarkdownTheme } from "@ea
|
|
|
5
5
|
|
|
6
6
|
import { delegationDurationMs, delegationSignalBadge, delegationSignalColor, formatDelegationContextLabel, formatDelegationCostLabel, formatDelegationModelLabel, formatDelegationSignalBadge, formatDuration, statusIcon, type DelegationRunView } from "./delegation-monitor.js";
|
|
7
7
|
import { sanitizeDelegationText } from "./delegation-markdown.js";
|
|
8
|
-
import { isRecord } from "../utils/records.js";
|
|
8
|
+
import { isRecord } from "../core/utils/records.js";
|
|
9
9
|
|
|
10
10
|
const FEED_MAX_BYTES = 240_000;
|
|
11
11
|
const FEED_MAX_LINES = 1_200;
|
|
@@ -2,7 +2,7 @@ import { closeSync, existsSync, openSync, readFileSync, readSync, statSync } fro
|
|
|
2
2
|
import { resolve, sep } from "node:path";
|
|
3
3
|
|
|
4
4
|
import type { ChildResult, DelegationFailureKind } from "../types.js";
|
|
5
|
-
import { isRecord } from "../utils/records.js";
|
|
5
|
+
import { isRecord } from "../core/utils/records.js";
|
|
6
6
|
|
|
7
7
|
export type DelegationRunSource = "delegate_agent" | "delegate_task";
|
|
8
8
|
export type DelegationRunMode = "single" | "parallel" | "chain";
|
|
@@ -2,31 +2,31 @@ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-a
|
|
|
2
2
|
import { compact, generateBranchSummary, isToolCallEventType } from "@earendil-works/pi-coding-agent";
|
|
3
3
|
import { Text } from "@earendil-works/pi-tui";
|
|
4
4
|
|
|
5
|
-
import { MODE_PROMPTS, ZOB_COMPACTION_CONTINUITY_CONTRACT, ZOB_TOOL_ROUTING_CONTRACT } from "../constants.js";
|
|
6
|
-
import { buildCurrentZobLivePeerCard } from "../coms-v2/identity.js";
|
|
7
|
-
import { buildZobLiveAckEnvelope, buildZobLiveErrorEnvelope, buildZobLivePongEnvelope } from "../coms-v2/envelope.js";
|
|
8
|
-
import { appendLiveCompletedRef } from "../coms-v2/ledger-bridge.js";
|
|
9
|
-
import { bindZobLocalEndpoint, makeZobLocalEndpoint, sendZobLocalEnvelope } from "../coms-v2/local-transport.js";
|
|
10
|
-
import { readZobComsV2Policy } from "../coms-v2/policy.js";
|
|
11
|
-
import { registerCurrentZobLivePeer, touchCurrentZobLivePeer, unregisterCurrentZobLivePeer, writeZobLivePeerCard } from "../coms-v2/registry.js";
|
|
12
|
-
import { clearZpeerNewCarryoverProfile, readZpeerLocalProfile, readZpeerNewCarryoverProfile, writeZpeerLocalProfileFromPeer, writeZpeerNewCarryoverProfile, zpeerProfileIdIsSharedFallback } from "../coms-v2/zpeer-profile.js";
|
|
13
|
-
import {
|
|
14
|
-
import type { ZpeerRoomMembership } from "../coms-v2/types.js";
|
|
15
|
-
import { buildZobLiveResponseEnvelope } from "../coms-v2/response-capture.js";
|
|
16
|
-
import { writeZobComsRedactedCapture } from "../coms-v2/transcript-capture.js";
|
|
17
|
-
import { formatGoalActivationMode, runtimeGoalStatusLine } from "
|
|
18
|
-
import { formatInteractiveAutonomyPromptHint, formatMissionReadinessForUi, scoreMissionReadiness, toMissionReadinessLedgerEntry } from "../interactive-autonomy.js";
|
|
19
|
-
import { formatGoalTodoPromptHint } from "../goal-todos.js";
|
|
20
|
-
import { resolveRuleProfile } from "../rules.js";
|
|
21
|
-
import { loadDamageRules } from "../safety.js";
|
|
22
|
-
import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
|
|
23
|
-
import { loadZagentManifest,
|
|
5
|
+
import { EXTERNAL_PACKAGE_TOOLS_CONTRACT, MODE_PROMPTS, ZOB_COMPACTION_CONTINUITY_CONTRACT, ZOB_TOOL_ROUTING_CONTRACT } from "../core/constants.js";
|
|
6
|
+
import { buildCurrentZobLivePeerCard } from "../domains/coms/coms-v2/identity.js";
|
|
7
|
+
import { buildZobLiveAckEnvelope, buildZobLiveErrorEnvelope, buildZobLivePongEnvelope } from "../domains/coms/coms-v2/envelope.js";
|
|
8
|
+
import { appendLiveCompletedRef } from "../domains/coms/coms-v2/ledger-bridge.js";
|
|
9
|
+
import { bindZobLocalEndpoint, makeZobLocalEndpoint, sendZobLocalEnvelope } from "../domains/coms/coms-v2/local-transport.js";
|
|
10
|
+
import { readZobComsV2Policy } from "../domains/coms/coms-v2/policy.js";
|
|
11
|
+
import { pruneExpiredZobLivePeers, registerCurrentZobLivePeer, touchCurrentZobLivePeer, unregisterCurrentZobLivePeer, writeZobLivePeerCard } from "../domains/coms/coms-v2/registry.js";
|
|
12
|
+
import { clearZpeerNewCarryoverProfile, readZpeerLocalProfile, readZpeerNewCarryoverProfile, writeZpeerLocalProfileFromPeer, writeZpeerNewCarryoverProfile, zpeerProfileIdIsSharedFallback } from "../domains/coms/coms-v2/zpeer-profile.js";
|
|
13
|
+
import { buildZpeerPeerRoomSummaries, ensureZpeerFields, refreshZpeerSelf } from "../domains/coms/coms-v2/zpeer.js";
|
|
14
|
+
import type { ZpeerRoomMembership } from "../domains/coms/coms-v2/types.js";
|
|
15
|
+
import { buildZobLiveResponseEnvelope } from "../domains/coms/coms-v2/response-capture.js";
|
|
16
|
+
import { writeZobComsRedactedCapture } from "../domains/coms/coms-v2/transcript-capture.js";
|
|
17
|
+
import { formatGoalActivationMode, runtimeGoalStatusLine } from "./goal-runtime.js";
|
|
18
|
+
import { formatInteractiveAutonomyPromptHint, formatMissionReadinessForUi, scoreMissionReadiness, toMissionReadinessLedgerEntry } from "../domains/autonomy/interactive-autonomy.js";
|
|
19
|
+
import { formatGoalTodoPromptHint } from "../domains/goal/goal-todos.js";
|
|
20
|
+
import { resolveRuleProfile } from "../domains/governance/rules.js";
|
|
21
|
+
import { loadDamageRules } from "../domains/governance/safety.js";
|
|
22
|
+
import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
|
|
23
|
+
import { loadZagentManifest, readZagentPrompt, resolveZagentRuntimeRoomBindings } from "../domains/coms/zagents.js";
|
|
24
24
|
import type { AssistantLikeMessage } from "../types.js";
|
|
25
|
-
import { blockedFeedback } from "../utils/formatting.js";
|
|
26
|
-
import { sha256 } from "../utils/hashing.js";
|
|
27
|
-
import { buildZcommitPlan, recordZcommitTouchedFile, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitCommandResult, type ZcommitOwnedPathRef, type ZcommitPlan } from "../git-ops.js";
|
|
28
|
-
import { pathMatches } from "../utils/paths.js";
|
|
29
|
-
import { isRecord, textFromMessage } from "../utils/records.js";
|
|
25
|
+
import { blockedFeedback } from "../core/utils/formatting.js";
|
|
26
|
+
import { sha256 } from "../core/utils/hashing.js";
|
|
27
|
+
import { buildZcommitPlan, recordZcommitTouchedFile, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitCommandResult, type ZcommitOwnedPathRef, type ZcommitPlan } from "../domains/git/git-ops.js";
|
|
28
|
+
import { pathMatches } from "../core/utils/paths.js";
|
|
29
|
+
import { isRecord, textFromMessage } from "../core/utils/records.js";
|
|
30
30
|
import { showDelegationOverlay } from "./delegation-overlay.js";
|
|
31
31
|
import { buildDeterministicZobCompactionResult, buildDeterministicZobCompactionSummary, buildZobCompactionInstructions, buildZobCompactionLedgerEntry, withZobCompactionDetails, ZOB_COMPACTION_ENTRY_TYPE, zobCompactionBodyFreeViolations } from "./compaction-policy.js";
|
|
32
32
|
import { buildZcompactPreparation, cancelZcompactPending, maybeTriggerZcompact, runZcompactCompactionHook } from "./auto-compaction.js";
|
|
@@ -78,17 +78,20 @@ function loadActiveZagentById(state: HarnessRuntimeState, repoRoot: string, zage
|
|
|
78
78
|
const loaded = loadZagentManifest(repoRoot, zagentId);
|
|
79
79
|
const manifest = loaded.manifest;
|
|
80
80
|
const prompt = readZagentPrompt(repoRoot, manifest.promptRef);
|
|
81
|
-
const
|
|
81
|
+
const resolved = resolveZagentRuntimeRoomBindings(repoRoot, manifest);
|
|
82
|
+
const rooms = resolved.rooms;
|
|
82
83
|
const activeRoom = manifest.activeRoom ?? rooms.find((room) => room.active)?.id ?? manifest.defaultRoom;
|
|
83
84
|
const errors = [...loaded.errors, ...prompt.errors];
|
|
84
85
|
const nextZagent: ActiveZagentState = {
|
|
85
86
|
id: manifest.id,
|
|
86
|
-
team: manifest.team,
|
|
87
|
+
team: manifest.team ?? resolved.teamIds[0],
|
|
88
|
+
teams: resolved.teamIds,
|
|
87
89
|
role: manifest.role,
|
|
88
90
|
alias: manifest.alias,
|
|
89
91
|
description: manifest.description,
|
|
90
92
|
rooms,
|
|
91
93
|
activeRoom,
|
|
94
|
+
defaultMode: manifest.defaultMode,
|
|
92
95
|
prompt: prompt.body,
|
|
93
96
|
promptRef: manifest.promptRef,
|
|
94
97
|
path: loaded.path,
|
|
@@ -136,7 +139,7 @@ function formatZagentPromptHint(state: HarnessRuntimeState): string {
|
|
|
136
139
|
const policy = zagent.communicationPolicy ? JSON.stringify(zagent.communicationPolicy) : "not specified";
|
|
137
140
|
const errors = zagent.errors.length > 0 ? `\n- load warnings: ${zagent.errors.slice(0, 5).join(" | ")}` : "";
|
|
138
141
|
const promptBody = zagent.prompt?.trim() ? `\n\nZAGENT PROMPT BODY\n${zagent.prompt.trim()}` : "";
|
|
139
|
-
return `\n\nZAGENT RUNTIME ACTIVATION\n- id: ${zagent.id}\n- team: ${zagent.team ?? "default"}\n- role: ${zagent.role ?? "not specified"}\n- alias: ${zagent.alias ? `@${zagent.alias}` : "not specified"}\n- rooms: ${rooms.join(", ") || "none"}\n- activeRoom: ${zagent.activeRoom ?? "not specified"}\n- communicationPolicy: ${policy}\n- promptRef: ${zagent.promptRef ?? "none"}\n- ZAgents are full Pi sessions tied to ZPeer/live coordination, not delegate subagents.${errors}${promptBody}`;
|
|
142
|
+
return `\n\nZAGENT RUNTIME ACTIVATION\n- id: ${zagent.id}\n- team: ${zagent.team ?? "default"}\n- teams: ${zagent.teams?.join(", ") || zagent.team || "default"}\n- role: ${zagent.role ?? "not specified"}\n- alias: ${zagent.alias ? `@${zagent.alias}` : "not specified"}\n- rooms: ${rooms.join(", ") || "none"}\n- activeRoom: ${zagent.activeRoom ?? "not specified"}\n- defaultMode: ${zagent.defaultMode ?? "not specified"}\n- communicationPolicy: ${policy}\n- promptRef: ${zagent.promptRef ?? "none"}\n- ZAgents are full Pi sessions tied to ZPeer/live coordination, not delegate subagents.${errors}${promptBody}`;
|
|
140
143
|
}
|
|
141
144
|
|
|
142
145
|
function zpeerRuntimeProfileId(ctx: ExtensionContext): string {
|
|
@@ -309,13 +312,22 @@ function buildZpeerAwarenessPrompt(state: HarnessRuntimeState, repoRoot: string)
|
|
|
309
312
|
if (!state.zobLive.peerCard) {
|
|
310
313
|
return "\n\nZPEER AWARENESS\n- local peer endpoint: unavailable this turn\n- Use zpeer_ask with mode=\"async\" or /zpeer only when useful or user-requested for peer coordination; avoid spam/loops and do not invent hidden worker-to-worker chat.";
|
|
311
314
|
}
|
|
312
|
-
const
|
|
313
|
-
const
|
|
314
|
-
const
|
|
315
|
-
const
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
315
|
+
const summaries = buildZpeerPeerRoomSummaries(repoRoot, state.zobLive.peerCard);
|
|
316
|
+
const activeSummary = summaries.find((summary) => summary.active) ?? summaries[0];
|
|
317
|
+
const memberships = (state.zobLive.peerCard.zpeerMemberships?.length ?? summaries.length) || 1;
|
|
318
|
+
const roomLines = summaries.slice(0, 6).map((summary) => {
|
|
319
|
+
const selfAlias = summary.selfAlias ?? "?";
|
|
320
|
+
const peerAliases = summary.onlineAliases.filter((alias) => alias !== selfAlias).slice(0, 6).map((alias) => `@${alias}`);
|
|
321
|
+
const unavailable = summary.stale + summary.offline;
|
|
322
|
+
const duplicateText = summary.duplicateAliases.length > 0 ? ` liveDuplicates=${summary.duplicateAliases.map((alias) => `@${alias}`).join(",")}` : "";
|
|
323
|
+
return ` - ${summary.active ? "*" : " "} ${summary.roomId}: self=@${selfAlias}; online=${peerAliases.join(",") || "none"}; unavailable=${unavailable} (stale=${summary.stale}, offline=${summary.offline})${duplicateText}`;
|
|
324
|
+
});
|
|
325
|
+
if (summaries.length > 6) roomLines.push(` - +${summaries.length - 6} more room${summaries.length - 6 === 1 ? "" : "s"}`);
|
|
326
|
+
const activeSelfAlias = activeSummary?.selfAlias ?? "?";
|
|
327
|
+
const activePeerAliases = (activeSummary?.onlineAliases ?? []).filter((alias) => alias !== activeSelfAlias).slice(0, 8).map((alias) => `@${alias}`);
|
|
328
|
+
const activeUnavailable = (activeSummary?.stale ?? 0) + (activeSummary?.offline ?? 0);
|
|
329
|
+
const activeDuplicateLine = activeSummary && activeSummary.duplicateAliases.length > 0 ? `\n- duplicate live aliases: ${activeSummary.duplicateAliases.map((alias) => `@${alias}`).join(", ")}` : "";
|
|
330
|
+
return `\n\nZPEER AWARENESS (transient, rebuilt each turn)\n- active room: ${activeSummary?.roomId ?? "default"}\n- memberships: ${memberships}\n- self: @${activeSelfAlias}\n- online peers: ${activePeerAliases.join(", ") || "none"}\n- unavailable peers: ${activeUnavailable} (stale=${activeSummary?.stale ?? 0}, offline=${activeSummary?.offline ?? 0})${activeDuplicateLine}\n- rooms:\n${roomLines.join("\n") || " - none"}\n- Use zpeer_ask with explicit roomId when targeting a non-active room.\n- posture: local_socket-only, room-scoped, hash-only durable ledgers, bodyStored=false, networkEnabled=false\n- For non-trivial review/debug/planning peer coordination, agents may use zpeer_ask with mode=\"async\" so the request is visible, governed, and non-blocking; /zpeer remains the interactive command path.\n- Passive wait rule: if the only remaining action is waiting for ZPeer/coms replies, stop the turn and remain idle; do not poll, call tools, or continue just to wait.\n- Use ZPeer only when useful or user-requested; avoid spam, duplicate asks, and reply loops; do not use it for hidden free chat or to bypass topology/safety gates.\n- Raw ZPeer bodies are transient; durable records must remain hash-only/bodyStored=false.\n- last ZPeer event: ${formatZpeerLastEvent(state.zobLive.lastEvent)}`;
|
|
319
331
|
}
|
|
320
332
|
|
|
321
333
|
const SAME_AGENT_MODE_INTENT_PROMPT = [
|
|
@@ -377,6 +389,7 @@ function handleSameAgentModeIntent(pi: ExtensionAPI, state: HarnessRuntimeState,
|
|
|
377
389
|
async function startOrRefreshZobLiveRuntime(pi: ExtensionAPI, state: HarnessRuntimeState, ctx: ExtensionContext): Promise<void> {
|
|
378
390
|
const repoRoot = ctx.cwd;
|
|
379
391
|
const profileId = zpeerRuntimeProfileId(ctx);
|
|
392
|
+
try { pruneExpiredZobLivePeers(repoRoot); } catch { /* best-effort ghost peer cleanup; live runtime must remain available */ }
|
|
380
393
|
const policy = readZobComsV2Policy(repoRoot);
|
|
381
394
|
if (policy.mode === "off" || policy.mode === "required_network") {
|
|
382
395
|
safelyUpdateZobLivePeer(repoRoot, state.zobLive.peerCard ? "touch" : "register");
|
|
@@ -407,7 +420,7 @@ async function startOrRefreshZobLiveRuntime(pi: ExtensionAPI, state: HarnessRunt
|
|
|
407
420
|
const server = await bindZobLocalEndpoint(endpoint, async (envelope) => {
|
|
408
421
|
if (envelope.type === "ping") return buildZobLivePongEnvelope(envelope);
|
|
409
422
|
if (envelope.type === "response") {
|
|
410
|
-
state.zobLive.pendingReplies.complete(envelope.msgId, envelope);
|
|
423
|
+
const completedActiveWait = state.zobLive.pendingReplies.complete(envelope.msgId, envelope);
|
|
411
424
|
clearPassivePeerWaitForResponse(state, envelope);
|
|
412
425
|
setZpeerLastEvent(state, {
|
|
413
426
|
kind: "reply",
|
|
@@ -425,7 +438,7 @@ async function startOrRefreshZobLiveRuntime(pi: ExtensionAPI, state: HarnessRunt
|
|
|
425
438
|
display: true,
|
|
426
439
|
details: { kind: "reply", roomId: state.zobLive.lastEvent?.roomId, fromAlias: envelope.sender, toAlias: envelope.receiver, status: "reply", msgId: envelope.msgId, taskHash: envelope.taskHash, outputHash: envelope.outputHash, bodyStored: false, localOnly: true, networkEnabled: false },
|
|
427
440
|
}, { triggerTurn: false });
|
|
428
|
-
if (envelope.transientResponse) {
|
|
441
|
+
if (!completedActiveWait && envelope.transientResponse) {
|
|
429
442
|
void pi.sendMessage({
|
|
430
443
|
customType: "zob-zpeer-response",
|
|
431
444
|
content: `ZPeer async reply received from @${envelope.sender ?? "?"} to @${envelope.receiver ?? "?"}. Continue the prior task using this response; do not poll or wait further only for this reply.\n\n${envelope.transientResponse}`,
|
|
@@ -948,7 +961,7 @@ export function registerHarnessEvents(pi: ExtensionAPI, state: HarnessRuntimeSta
|
|
|
948
961
|
if (state.activeMode === "vanilla") {
|
|
949
962
|
return { systemPrompt: `${event.systemPrompt}\n\n${MODE_PROMPTS.vanilla}` };
|
|
950
963
|
}
|
|
951
|
-
const contractHint = `\n\nZOB HARNESS OPERATING CONTRACT\n- Prefer Explore -> Plan -> Implement -> Oracle for non-trivial work.\n- Use the six-part contract for delegated work: TASK / EXPECTED OUTCOME / REQUIRED TOOLS / MUST DO / MUST NOT DO / CONTEXT.\n- Do not claim completion without concrete evidence.\n- If output may truncate, prioritize verdict, blockers, and next steps over exhaustive listings.\n\n${SAME_AGENT_MODE_INTENT_PROMPT}\n\n${ZOB_TOOL_ROUTING_CONTRACT}\n\n${ZOB_COMPACTION_CONTINUITY_CONTRACT}\n\n${MODE_PROMPTS[state.activeMode]}${goalHint}${runtimeGoalHint}${rulesHint}${autonomyHint}${zagentHint}${zpeerHint}`;
|
|
964
|
+
const contractHint = `\n\nZOB HARNESS OPERATING CONTRACT\n- Prefer Explore -> Plan -> Implement -> Oracle for non-trivial work.\n- Use the six-part contract for delegated work: TASK / EXPECTED OUTCOME / REQUIRED TOOLS / MUST DO / MUST NOT DO / CONTEXT.\n- Do not claim completion without concrete evidence.\n- If output may truncate, prioritize verdict, blockers, and next steps over exhaustive listings.\n\n${SAME_AGENT_MODE_INTENT_PROMPT}\n\n${ZOB_TOOL_ROUTING_CONTRACT}\n\n${ZOB_COMPACTION_CONTINUITY_CONTRACT}\n\n${EXTERNAL_PACKAGE_TOOLS_CONTRACT}\n\n${MODE_PROMPTS[state.activeMode]}${goalHint}${runtimeGoalHint}${rulesHint}${autonomyHint}${zagentHint}${zpeerHint}`;
|
|
952
965
|
return { systemPrompt: `${event.systemPrompt}${contractHint}` };
|
|
953
966
|
});
|
|
954
967
|
|
|
@@ -958,6 +971,9 @@ export function registerHarnessEvents(pi: ExtensionAPI, state: HarnessRuntimeSta
|
|
|
958
971
|
state.delegations.runs = [];
|
|
959
972
|
restoreHarnessState(state, ctx);
|
|
960
973
|
loadActiveZagentFromEnv(state, ctx.cwd);
|
|
974
|
+
if (state.zagent.defaultMode && state.zagent.defaultMode !== state.activeMode) {
|
|
975
|
+
applyMode(pi, state, ctx, state.zagent.defaultMode, false);
|
|
976
|
+
}
|
|
961
977
|
state.activeRuleResolution = resolveRuleProfile({ repoRoot: ctx.cwd, mode: state.activeMode });
|
|
962
978
|
await startOrRefreshZobLiveRuntime(pi, state, ctx);
|
|
963
979
|
applyMode(pi, state, ctx, state.activeMode, false);
|
|
@@ -4,12 +4,12 @@ import { StringEnum } from "@earendil-works/pi-ai";
|
|
|
4
4
|
import { Text } from "@earendil-works/pi-tui";
|
|
5
5
|
import { Type } from "typebox";
|
|
6
6
|
|
|
7
|
-
import { parseGoalState, validateGoalState } from "
|
|
7
|
+
import { parseGoalState, validateGoalState } from "../domains/goal/goal.js";
|
|
8
8
|
import {
|
|
9
9
|
importChainRunTodos,
|
|
10
10
|
importFactoryRunTodos,
|
|
11
11
|
importOrchestrationRunTodos,
|
|
12
|
-
} from "
|
|
12
|
+
} from "../domains/goal/goal-todo-imports.js";
|
|
13
13
|
import {
|
|
14
14
|
addGoalTodo,
|
|
15
15
|
formatGoalTodoSummary,
|
|
@@ -28,12 +28,12 @@ import {
|
|
|
28
28
|
type GoalTodoStatus,
|
|
29
29
|
type GoalTodoSummary,
|
|
30
30
|
type ResolveGoalTodoAction,
|
|
31
|
-
} from "
|
|
32
|
-
import type { GoalState } from "
|
|
33
|
-
import type { HarnessRuntimeState } from "./
|
|
34
|
-
import { sha256 } from "
|
|
35
|
-
import { isRecord } from "
|
|
36
|
-
import { buildZobCompactionInstructions } from "./
|
|
31
|
+
} from "../domains/goal/goal-todos.js";
|
|
32
|
+
import type { GoalState } from "../types.js";
|
|
33
|
+
import type { HarnessRuntimeState } from "./state.js";
|
|
34
|
+
import { sha256 } from "../core/utils/hashing.js";
|
|
35
|
+
import { isRecord } from "../core/utils/records.js";
|
|
36
|
+
import { buildZobCompactionInstructions } from "./compaction-policy.js";
|
|
37
37
|
|
|
38
38
|
export const ZOB_RUNTIME_GOAL_ENTRY_TYPE = "zob-runtime-goal";
|
|
39
39
|
export const ZOB_GOAL_MODE_ENTRY_TYPE = "zob-goal-mode";
|
|
@@ -755,7 +755,7 @@ export async function handleGoalCommand(pi: ExtensionAPI, state: HarnessRuntimeS
|
|
|
755
755
|
if (text === "todo overlay" || text.startsWith("todo overlay ") || text === "todo view" || text.startsWith("todo view ")) {
|
|
756
756
|
const parts = text.split(/\s+/);
|
|
757
757
|
const initialTodoId = parts[2];
|
|
758
|
-
const { showGoalTodoOverlay } = await import("./
|
|
758
|
+
const { showGoalTodoOverlay } = await import("./goal-todo-overlay.js");
|
|
759
759
|
await showGoalTodoOverlay(ctx, state, initialTodoId);
|
|
760
760
|
render();
|
|
761
761
|
return;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ExtensionContext, Theme } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import { matchesKey, truncateToWidth, visibleWidth, type Component } from "@earendil-works/pi-tui";
|
|
3
3
|
|
|
4
|
-
import { formatGoalTodoSummary, summarizeGoalTodos, type GoalTodoNode } from "../goal-todos.js";
|
|
4
|
+
import { formatGoalTodoSummary, summarizeGoalTodos, type GoalTodoNode } from "../domains/goal/goal-todos.js";
|
|
5
5
|
import type { HarnessRuntimeState } from "./state.js";
|
|
6
6
|
|
|
7
7
|
function padToWidth(text: string, width: number): string {
|
|
@@ -2,8 +2,8 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
|
|
4
4
|
import type { ModeName } from "../types.js";
|
|
5
|
-
import { sha256 } from "../utils/hashing.js";
|
|
6
|
-
import { safeFileStem } from "../utils/paths.js";
|
|
5
|
+
import { sha256 } from "../core/utils/hashing.js";
|
|
6
|
+
import { safeFileStem } from "../core/utils/paths.js";
|
|
7
7
|
import { looksLikeCompletePlanResponse, stripModeIntentMarkup } from "./mode-intent.js";
|
|
8
8
|
|
|
9
9
|
const PLAN_INDEX_SCHEMA = "zob.plan-index.v1";
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import type { TUI } from "@earendil-works/pi-tui";
|
|
3
3
|
|
|
4
|
-
import { DEFAULT_RULES, MODE_PROMPTS } from "../constants.js";
|
|
4
|
+
import { DEFAULT_RULES, MODE_PROMPTS } from "../core/constants.js";
|
|
5
5
|
import type { ChildResult, DamageRules, DelegationFailureKind, GoalState, ModeName, QueueTickResult, RuleResolution } from "../types.js";
|
|
6
|
-
import { validateGoalState, validateStrictGoalSpecAnchor, type StrictGoalSpecAnchor } from "../goal.js";
|
|
7
|
-
import { DEFAULT_GOAL_ACTIVATION_MODE, restoreGoalActivationModeFromBranch, restoreRuntimeGoalFromBranch, type GoalActivationMode, type RuntimeGoal } from "
|
|
8
|
-
import { createGoalTodoState, restoreGoalTodosFromBranch, type GoalTodoState } from "../goal-todos.js";
|
|
9
|
-
import { isRecord } from "../utils/records.js";
|
|
10
|
-
import type { ZobLiveEnvelope } from "../coms-v2/envelope.js";
|
|
11
|
-
import type { ZobLocalTransportServer } from "../coms-v2/local-transport.js";
|
|
12
|
-
import { ZobPendingReplies } from "../coms-v2/pending-replies.js";
|
|
13
|
-
import type { ZobLivePeerCard } from "../coms-v2/types.js";
|
|
6
|
+
import { validateGoalState, validateStrictGoalSpecAnchor, type StrictGoalSpecAnchor } from "../domains/goal/goal.js";
|
|
7
|
+
import { DEFAULT_GOAL_ACTIVATION_MODE, restoreGoalActivationModeFromBranch, restoreRuntimeGoalFromBranch, type GoalActivationMode, type RuntimeGoal } from "./goal-runtime.js";
|
|
8
|
+
import { createGoalTodoState, restoreGoalTodosFromBranch, type GoalTodoState } from "../domains/goal/goal-todos.js";
|
|
9
|
+
import { isRecord } from "../core/utils/records.js";
|
|
10
|
+
import type { ZobLiveEnvelope } from "../domains/coms/coms-v2/envelope.js";
|
|
11
|
+
import type { ZobLocalTransportServer } from "../domains/coms/coms-v2/local-transport.js";
|
|
12
|
+
import { ZobPendingReplies } from "../domains/coms/coms-v2/pending-replies.js";
|
|
13
|
+
import type { ZobLivePeerCard } from "../domains/coms/coms-v2/types.js";
|
|
14
14
|
import { createDelegationMonitorState, trimDelegationRuns, type DelegationMonitorState, type DelegationRunMode, type DelegationRunSource, type DelegationRunStatus, type DelegationRunView } from "./delegation-monitor.js";
|
|
15
|
-
import { DEFAULT_DAEMON_RUNTIME_POLICY, type DaemonLoopSnapshot, type DaemonRuntimePolicy, type DaemonRuntimeState, type DaemonTickPlan } from "../daemon-runtime.js";
|
|
16
|
-
import { createInteractiveAutonomyRuntimeState, restoreInteractiveAutonomyState, type InteractiveAutonomyRuntimeState } from "../interactive-autonomy.js";
|
|
15
|
+
import { DEFAULT_DAEMON_RUNTIME_POLICY, type DaemonLoopSnapshot, type DaemonRuntimePolicy, type DaemonRuntimeState, type DaemonTickPlan } from "../domains/autonomy/daemon-runtime.js";
|
|
16
|
+
import { createInteractiveAutonomyRuntimeState, restoreInteractiveAutonomyState, type InteractiveAutonomyRuntimeState } from "../domains/autonomy/interactive-autonomy.js";
|
|
17
17
|
import type { ZobModeIntent } from "./mode-intent.js";
|
|
18
|
-
import type { ZAgentRoomBinding } from "../zagents.js";
|
|
18
|
+
import type { ZAgentRoomBinding } from "../domains/coms/zagents.js";
|
|
19
19
|
import { createZcompactRuntimeState, restoreZcompactStateFromBranch, type ZcompactRuntimeState } from "./auto-compaction.js";
|
|
20
|
-
import { createZcommitRuntimeState, recordZcommitOwnedPath, type ZcommitLastCommitRecord, type ZcommitOwnershipSource, type ZcommitRuntimeState, type ZcommitToggleState } from "../git-ops.js";
|
|
20
|
+
import { createZcommitRuntimeState, recordZcommitOwnedPath, type ZcommitLastCommitRecord, type ZcommitOwnershipSource, type ZcommitRuntimeState, type ZcommitToggleState } from "../domains/git/git-ops.js";
|
|
21
21
|
|
|
22
22
|
export interface DelegationMouseRuntimeState {
|
|
23
23
|
tui?: TUI;
|
|
@@ -91,11 +91,13 @@ export interface DaemonHarnessRuntimeState {
|
|
|
91
91
|
export interface ZagentRuntimeState {
|
|
92
92
|
id?: string;
|
|
93
93
|
team?: string;
|
|
94
|
+
teams?: string[];
|
|
94
95
|
role?: string;
|
|
95
96
|
alias?: string;
|
|
96
97
|
description?: string;
|
|
97
98
|
rooms: ZAgentRoomBinding[];
|
|
98
99
|
activeRoom?: string;
|
|
100
|
+
defaultMode?: ModeName;
|
|
99
101
|
prompt?: string;
|
|
100
102
|
promptRef?: string;
|
|
101
103
|
path?: string;
|