@hassangameryt/freeflow 0.7.3 → 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/.agents/plugins/marketplace.json +2 -2
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +3 -3
- package/.cursor-plugin/plugin.json +1 -1
- package/NOTICE +14 -0
- package/README.md +101 -159
- package/capabilities/cognitive-routing/SKILL.md +47 -210
- package/capabilities/cognitive-routing/references/coordinator.md +163 -0
- package/capabilities/cognitive-routing/references/worker.md +38 -0
- package/capabilities/compaction/SKILL.md +49 -0
- package/capabilities/compaction/references/summary-format.md +250 -0
- package/capabilities/messaging/SKILL.md +49 -0
- package/capabilities/task-memory/SKILL.md +87 -0
- package/command-surface.json +8 -52
- package/gemini-extension.json +1 -1
- package/hooks/claude/hooks.json +13 -3
- package/hooks/codex/hooks.json +2 -1
- package/hooks/shared/runtime-context.mjs +73 -83
- package/licenses/Apache-2.0.txt +55 -0
- package/package.json +42 -12
- package/pi-extension/README.md +41 -0
- package/pi-extension/dist/ask-user/ask.js +108 -0
- package/pi-extension/dist/ask-user/form.js +250 -0
- package/pi-extension/dist/ask-user/questions.js +66 -0
- package/pi-extension/dist/ask-user/tool.js +124 -0
- package/pi-extension/dist/cognitive-routing/assembler.js +417 -0
- package/pi-extension/dist/cognitive-routing/bootstrap.js +90 -0
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/config.js +8 -6
- package/pi-extension/dist/cognitive-routing/economics.js +45 -0
- package/pi-extension/dist/cognitive-routing/event-schema.js +388 -0
- package/pi-extension/dist/{session-sources/events.js → cognitive-routing/event-store.js} +107 -41
- package/pi-extension/dist/cognitive-routing/gate.js +256 -0
- package/pi-extension/dist/cognitive-routing/handlers.js +901 -0
- package/pi-extension/dist/cognitive-routing/handoffs.js +350 -0
- package/pi-extension/dist/cognitive-routing/model-control.js +476 -0
- package/pi-extension/dist/cognitive-routing/projection.js +520 -0
- package/pi-extension/dist/cognitive-routing/provenance.js +83 -0
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/render.js +15 -15
- package/pi-extension/dist/cognitive-routing/runtime.js +398 -0
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/schemas.js +47 -11
- package/pi-extension/dist/cognitive-routing/session.js +223 -0
- package/pi-extension/dist/{session-sources → cognitive-routing}/sources.js +126 -87
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/state.js +55 -386
- package/pi-extension/dist/cognitive-routing/status.js +81 -0
- package/pi-extension/dist/cognitive-routing/tools.js +74 -0
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/types.js +14 -11
- package/pi-extension/dist/compaction/carry.js +205 -0
- package/pi-extension/dist/compaction/config.js +24 -0
- package/pi-extension/dist/compaction/controller.js +494 -0
- package/pi-extension/dist/compaction/harness.js +93 -0
- package/pi-extension/dist/compaction/results.js +159 -0
- package/pi-extension/dist/compaction/thresholds.js +35 -0
- package/pi-extension/dist/compaction/tool.js +57 -0
- package/pi-extension/dist/host/branch.js +13 -0
- package/pi-extension/dist/host/canonical.js +12 -0
- package/pi-extension/dist/host/catalog.js +62 -0
- package/pi-extension/dist/host/config-validation.js +233 -0
- package/pi-extension/dist/host/config.js +361 -0
- package/pi-extension/dist/host/inbound.js +142 -0
- package/pi-extension/dist/host/projection-tags.js +60 -0
- package/pi-extension/dist/host/prompts.js +93 -0
- package/pi-extension/dist/{session-sources → host}/read-only-session.js +117 -1
- package/pi-extension/dist/{runtime → host}/request-history.js +125 -39
- package/pi-extension/dist/host/rows.js +25 -0
- package/pi-extension/dist/host/runtime-state.js +204 -0
- package/pi-extension/dist/host/section-keeper.js +85 -0
- package/pi-extension/dist/host/settings/freeflow-command.js +2323 -0
- package/pi-extension/dist/{settings/settings-tui.js → host/settings/settings-view.js} +205 -73
- package/pi-extension/dist/host/staging.js +28 -0
- package/pi-extension/dist/host/status.js +115 -0
- package/pi-extension/dist/index.js +1004 -188
- package/pi-extension/dist/messaging/config.js +27 -0
- package/pi-extension/dist/messaging/messaging.js +398 -0
- package/pi-extension/dist/messaging/registry.js +57 -0
- package/pi-extension/dist/messaging/render.js +90 -0
- package/pi-extension/dist/messaging/tools.js +109 -0
- package/pi-extension/dist/messaging/transport.js +101 -0
- package/pi-extension/dist/provider-support/cache/anchor.js +21 -0
- package/pi-extension/dist/provider-support/cache/anthropic.js +102 -0
- package/pi-extension/dist/provider-support/cache/health.js +73 -0
- package/pi-extension/dist/provider-support/cache/index.js +58 -0
- package/pi-extension/dist/provider-support/cache/keepalive.js +222 -0
- package/pi-extension/dist/provider-support/cache/monitor.js +17 -0
- package/pi-extension/dist/provider-support/cache/openai-responses.js +48 -0
- package/pi-extension/dist/provider-support/effort.js +13 -0
- package/pi-extension/dist/provider-support/index.js +44 -3
- package/pi-extension/dist/provider-support/{astra → openai}/adapter.js +46 -29
- package/pi-extension/dist/provider-support/{astra → openai}/history.js +10 -8
- package/pi-extension/dist/provider-support/{astra → openai}/index.js +8 -4
- package/pi-extension/dist/provider-support/{astra → openai}/session-state.js +29 -38
- package/pi-extension/dist/provider-support/routes.js +17 -0
- package/pi-extension/dist/task-memory/config.js +49 -0
- package/pi-extension/dist/task-memory/registry.js +119 -0
- package/pi-extension/dist/task-memory/render.js +107 -0
- package/pi-extension/dist/task-memory/runtime.js +994 -0
- package/pi-extension/dist/task-memory/tool.js +233 -0
- package/pi-extension/dist/tool-execution/apply-patch/grammar.js +23 -0
- package/pi-extension/dist/tool-execution/apply-patch/match.js +38 -0
- package/pi-extension/dist/tool-execution/apply-patch/parser.js +177 -0
- package/pi-extension/dist/tool-execution/apply-patch/plan.js +201 -0
- package/pi-extension/dist/tool-execution/apply-patch/tool.js +84 -0
- package/pi-extension/dist/tool-execution/background.js +430 -0
- package/pi-extension/dist/tool-execution/bash-guard.js +23 -0
- package/pi-extension/dist/tool-execution/config.js +33 -0
- package/pi-extension/dist/tool-execution/edit-messages.js +120 -0
- package/pi-extension/dist/tool-execution/file-state.js +138 -0
- package/pi-extension/dist/tool-execution/file-tracking.js +163 -0
- package/pi-extension/dist/tool-execution/guidance-notices.js +124 -0
- package/pi-extension/dist/tool-execution/prompt.js +54 -0
- package/pi-extension/dist/tool-execution/skill-reads.js +143 -0
- package/pi-extension/dist/tool-execution/tools.js +16 -0
- package/pi-extension/freeflow/README.md +9 -0
- package/runtime/prompts/cognitive-routing.md +4 -4
- package/runtime/prompts/core.md +29 -72
- package/runtime/prompts/interaction-contract.md +18 -8
- package/runtime/prompts/tool-execution.md +25 -0
- package/runtime/prompts/working-method.md +25 -0
- package/skills/deliver-work/SKILL.md +76 -0
- package/skills/deliver-work/references/branch-closeout.md +134 -0
- package/skills/deliver-work/references/commit.md +83 -0
- package/skills/deliver-work/references/launch.md +94 -0
- package/skills/deliver-work/references/release.md +85 -0
- package/skills/deliver-work/scripts/commit-state.mjs +139 -0
- package/skills/deliver-work/scripts/delivery-state.mjs +107 -0
- package/skills/deliver-work/scripts/lib/git-state.mjs +178 -0
- package/skills/deliver-work/scripts/push-route.mjs +122 -0
- package/skills/deliver-work/scripts/release-preflight.mjs +177 -0
- package/skills/discuss-work/SKILL.md +148 -0
- package/skills/{discuss → discuss-work}/references/discussion-continuity.md +13 -50
- package/skills/discuss-work/references/learning-action.md +36 -0
- package/skills/discuss-work/scripts/choices.mjs +101 -0
- package/skills/discuss-work/scripts/lib/choices.mjs +159 -0
- package/skills/evaluate-behavior/SKILL.md +107 -0
- package/skills/evaluate-behavior/references/authoring.md +381 -0
- package/skills/evaluate-behavior/references/coding-tasks.md +145 -0
- package/skills/evaluate-behavior/references/conversations-pipelines-judges.md +177 -0
- package/skills/evaluate-behavior/references/design-and-measurement.md +273 -0
- package/skills/evaluate-behavior/references/running-and-evidence.md +245 -0
- package/skills/evaluate-behavior/scripts/claude-guard.mjs +76 -0
- package/skills/evaluate-behavior/scripts/guard-rules.mjs +309 -0
- package/skills/evaluate-behavior/scripts/lib/agreement.mjs +90 -0
- package/skills/evaluate-behavior/scripts/lib/arms.mjs +55 -0
- package/skills/evaluate-behavior/scripts/lib/budget.mjs +87 -0
- package/skills/evaluate-behavior/scripts/lib/build-source.mjs +287 -0
- package/skills/evaluate-behavior/scripts/lib/clear.mjs +74 -0
- package/skills/evaluate-behavior/scripts/lib/container.mjs +395 -0
- package/skills/evaluate-behavior/scripts/lib/decision.mjs +418 -0
- package/skills/evaluate-behavior/scripts/lib/definitions.mjs +1072 -0
- package/skills/evaluate-behavior/scripts/lib/freeflow.mjs +103 -0
- package/skills/evaluate-behavior/scripts/lib/grade-command.mjs +591 -0
- package/skills/evaluate-behavior/scripts/lib/grade-comparison.mjs +90 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-interaction.mjs +19 -18
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-support.mjs +32 -5
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-workspace.mjs +28 -12
- package/skills/evaluate-behavior/scripts/lib/grade.mjs +101 -0
- package/skills/evaluate-behavior/scripts/lib/hooks.mjs +98 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/confinement.mjs +196 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/constraints.mjs +111 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/index.mjs +48 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/isolation.mjs +74 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/launch.mjs +123 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/model-call.mjs +73 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/recorder.mjs +178 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/session.mjs +494 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/skills.mjs +81 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/index.mjs +31 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/names.mjs +3 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/confinement.mjs +173 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/host.mjs +148 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/index.mjs +70 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/isolation.mjs +81 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/model-call.mjs +79 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/process.mjs +241 -0
- package/skills/{evaluate-skill/scripts/lib → evaluate-behavior/scripts/lib/hosts/pi}/rpc.mjs +144 -26
- package/skills/evaluate-behavior/scripts/lib/identity.mjs +82 -0
- package/skills/evaluate-behavior/scripts/lib/judge.mjs +688 -0
- package/skills/evaluate-behavior/scripts/lib/metrics.mjs +332 -0
- package/skills/evaluate-behavior/scripts/lib/model-call.mjs +17 -0
- package/skills/evaluate-behavior/scripts/lib/participants.mjs +616 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/process.mjs +22 -0
- package/skills/evaluate-behavior/scripts/lib/queue.mjs +54 -0
- package/skills/evaluate-behavior/scripts/lib/reference.mjs +343 -0
- package/skills/evaluate-behavior/scripts/lib/reuse.mjs +277 -0
- package/skills/evaluate-behavior/scripts/lib/review.mjs +933 -0
- package/skills/evaluate-behavior/scripts/lib/runner.mjs +732 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/sandbox.mjs +121 -14
- package/skills/evaluate-behavior/scripts/lib/scan-shell.mjs +457 -0
- package/skills/evaluate-behavior/scripts/lib/scan.mjs +479 -0
- package/skills/evaluate-behavior/scripts/lib/seal.mjs +91 -0
- package/skills/evaluate-behavior/scripts/lib/shell.mjs +560 -0
- package/skills/evaluate-behavior/scripts/lib/source-override.mjs +64 -0
- package/skills/evaluate-behavior/scripts/lib/subject-file.mjs +88 -0
- package/skills/{evaluate-skill/scripts/lib/pi.mjs → evaluate-behavior/scripts/lib/subject.mjs} +239 -262
- package/skills/evaluate-behavior/scripts/lib/task-copy.mjs +124 -0
- package/skills/evaluate-behavior/scripts/lib/trials.mjs +524 -0
- package/skills/evaluate-behavior/scripts/lib/validity.mjs +68 -0
- package/skills/evaluate-behavior/scripts/lib/view-html.mjs +454 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/view.mjs +218 -11
- package/skills/evaluate-behavior/scripts/pi-command-tool.mjs +159 -0
- package/skills/evaluate-behavior/scripts/pi-container-route.mjs +23 -0
- package/skills/evaluate-behavior/scripts/pi-guard.mjs +77 -0
- package/skills/evaluate-behavior/scripts/pi-login-refresh.mjs +31 -0
- package/skills/evaluate-behavior/scripts/skill-eval.mjs +586 -0
- package/skills/execute-work/SKILL.md +96 -72
- package/skills/execute-work/references/code-practices.md +27 -49
- package/skills/execute-work/references/design.md +271 -0
- package/skills/execute-work/references/diagnose.md +117 -0
- package/skills/execute-work/references/migration.md +108 -0
- package/skills/execute-work/references/simplify.md +65 -0
- package/skills/execute-work/scripts/self-review.mjs +422 -0
- package/skills/execute-work/scripts/touch-map.mjs +290 -0
- package/skills/review-work/SKILL.md +94 -64
- package/skills/review-work/references/adjudication.md +94 -0
- package/skills/review-work/references/artifact.md +198 -0
- package/skills/review-work/references/evals-and-judges.md +66 -0
- package/skills/review-work/references/work.md +177 -0
- package/skills/review-work/scripts/check-brief.mjs +128 -0
- package/skills/review-work/scripts/review-packet.mjs +233 -0
- package/skills/setup-freeflow/SKILL.md +69 -16
- package/skills/track-work/SKILL.md +135 -151
- package/skills/track-work/references/handoff.md +190 -0
- package/skills/track-work/references/projects.md +51 -0
- package/skills/track-work/references/working-record-format.md +201 -344
- package/skills/track-work/scripts/lib/document.mjs +79 -19
- package/skills/track-work/scripts/lib/format.mjs +18 -1
- package/skills/track-work/scripts/lib/recover.mjs +254 -0
- package/skills/track-work/scripts/lib/registry.mjs +656 -0
- package/skills/track-work/scripts/lib/search.mjs +40 -0
- package/skills/track-work/scripts/lib/store.mjs +53 -21
- package/skills/track-work/scripts/lib/transitions.mjs +79 -4
- package/skills/track-work/scripts/lib/views.mjs +50 -1
- package/skills/track-work/scripts/working-record.mjs +263 -22
- package/skills/verify-work/SKILL.md +64 -47
- package/skills/verify-work/references/feature-map.md +120 -0
- package/skills/verify-work/references/runtime-evidence.md +203 -0
- package/skills/verify-work/references/test-design.md +27 -6
- package/skills/verify-work/scripts/test-changes.mjs +246 -0
- package/skills/write-docs/SKILL.md +171 -0
- package/skills/write-docs/references/documentation-shapes.md +184 -0
- package/skills/write-docs/references/spec-and-plan-shapes.md +308 -0
- package/skills/write-docs/scripts/artifact-check.mjs +148 -0
- package/skills/write-docs/scripts/docs-check.mjs +229 -0
- package/skills/write-docs/scripts/plan-lint.mjs +123 -0
- package/skills/write-skill/SKILL.md +165 -165
- package/skills/write-skill/references/activation-and-wording.md +143 -0
- package/skills/write-skill/references/placement-and-dependencies.md +154 -0
- package/skills/write-skill/scripts/lib/compare.mjs +701 -0
- package/skills/write-skill/scripts/lib/similarity.mjs +56 -0
- package/skills/write-skill/scripts/lib/skill-author.mjs +197 -3
- package/skills/write-skill/scripts/skill-author.mjs +67 -8
- package/capabilities/context-virtualization/SKILL.md +0 -103
- package/capabilities/conversation-history/SKILL.md +0 -53
- package/hooks/tests/check-host-adapters.test.mjs +0 -82
- package/hooks/tests/check-runtime-context-hook.sh +0 -212
- package/pi-extension/dist/cognitive-routing-v2/projection.js +0 -330
- package/pi-extension/dist/cognitive-routing-v2/runtime.js +0 -2181
- package/pi-extension/dist/cognitive-routing-v2/tools.js +0 -60
- package/pi-extension/dist/context-virtualization/commands.js +0 -89
- package/pi-extension/dist/context-virtualization/projector.js +0 -42
- package/pi-extension/dist/context-virtualization/runtime.js +0 -378
- package/pi-extension/dist/context-virtualization/state.js +0 -57
- package/pi-extension/dist/context-virtualization/types.js +0 -10
- package/pi-extension/dist/conversation-history/passages.js +0 -66
- package/pi-extension/dist/conversation-history/ranking.js +0 -105
- package/pi-extension/dist/conversation-history/runtime.js +0 -226
- package/pi-extension/dist/conversation-history/search.js +0 -56
- package/pi-extension/dist/conversation-history/types.js +0 -1
- package/pi-extension/dist/freeflow-context/resolver.js +0 -120
- package/pi-extension/dist/freeflow-context/runtime.js +0 -80
- package/pi-extension/dist/freeflow-context/source-projector.js +0 -95
- package/pi-extension/dist/freeflow-context/tool.js +0 -314
- package/pi-extension/dist/freeflow-context/types.js +0 -12
- package/pi-extension/dist/freeflow-context/visibility.js +0 -28
- package/pi-extension/dist/integrations/mcp-config.js +0 -29
- package/pi-extension/dist/runtime/runtime-context.js +0 -754
- package/pi-extension/dist/runtime/runtime-identity.js +0 -5
- package/pi-extension/dist/session-sources/provenance.js +0 -32
- package/pi-extension/dist/settings/settings-ui.js +0 -1360
- package/pi-extension/dist/ui/text-component.js +0 -57
- package/pi-extension/src/cognitive-routing-v2/budget.ts +0 -42
- package/pi-extension/src/cognitive-routing-v2/config.ts +0 -173
- package/pi-extension/src/cognitive-routing-v2/projection.ts +0 -375
- package/pi-extension/src/cognitive-routing-v2/render.ts +0 -277
- package/pi-extension/src/cognitive-routing-v2/runtime.ts +0 -2241
- package/pi-extension/src/cognitive-routing-v2/schemas.ts +0 -180
- package/pi-extension/src/cognitive-routing-v2/state.ts +0 -839
- package/pi-extension/src/cognitive-routing-v2/tools.ts +0 -62
- package/pi-extension/src/cognitive-routing-v2/types.ts +0 -254
- package/pi-extension/src/context-virtualization/commands.ts +0 -111
- package/pi-extension/src/context-virtualization/projector.ts +0 -62
- package/pi-extension/src/context-virtualization/runtime.ts +0 -428
- package/pi-extension/src/context-virtualization/state.ts +0 -79
- package/pi-extension/src/context-virtualization/types.ts +0 -92
- package/pi-extension/src/conversation-history/passages.ts +0 -81
- package/pi-extension/src/conversation-history/ranking.ts +0 -155
- package/pi-extension/src/conversation-history/runtime.ts +0 -250
- package/pi-extension/src/conversation-history/search.ts +0 -79
- package/pi-extension/src/conversation-history/types.ts +0 -31
- package/pi-extension/src/freeflow-context/resolver.ts +0 -139
- package/pi-extension/src/freeflow-context/runtime.ts +0 -100
- package/pi-extension/src/freeflow-context/source-projector.ts +0 -106
- package/pi-extension/src/freeflow-context/tool.ts +0 -366
- package/pi-extension/src/freeflow-context/types.ts +0 -70
- package/pi-extension/src/freeflow-context/visibility.ts +0 -53
- package/pi-extension/src/index.ts +0 -390
- package/pi-extension/src/integrations/mcp-config.ts +0 -32
- package/pi-extension/src/provider-support/astra/adapter.ts +0 -108
- package/pi-extension/src/provider-support/astra/history.ts +0 -145
- package/pi-extension/src/provider-support/astra/index.ts +0 -12
- package/pi-extension/src/provider-support/astra/session-state.ts +0 -113
- package/pi-extension/src/provider-support/index.ts +0 -5
- package/pi-extension/src/runtime/request-history.ts +0 -243
- package/pi-extension/src/runtime/runtime-context.ts +0 -860
- package/pi-extension/src/runtime/runtime-identity.ts +0 -8
- package/pi-extension/src/session-sources/events.ts +0 -230
- package/pi-extension/src/session-sources/provenance.ts +0 -39
- package/pi-extension/src/session-sources/read-only-session.ts +0 -170
- package/pi-extension/src/session-sources/sources.ts +0 -334
- package/pi-extension/src/settings/settings-tui.ts +0 -501
- package/pi-extension/src/settings/settings-ui.ts +0 -1652
- package/pi-extension/src/ui/text-component.ts +0 -66
- package/pi-extension/tests/cache-reuse/history.test.js +0 -117
- package/pi-extension/tests/cache-reuse/native.test.js +0 -91
- package/pi-extension/tests/cache-reuse/settings.test.js +0 -211
- package/pi-extension/tests/cognitive-routing-v2/communication.test.js +0 -577
- package/pi-extension/tests/cognitive-routing-v2/compaction-input.test.js +0 -183
- package/pi-extension/tests/cognitive-routing-v2/delegation.test.js +0 -557
- package/pi-extension/tests/cognitive-routing-v2/native.test.js +0 -474
- package/pi-extension/tests/cognitive-routing-v2/performance.test.js +0 -87
- package/pi-extension/tests/cognitive-routing-v2/persistence.test.js +0 -300
- package/pi-extension/tests/cognitive-routing-v2/projection.test.js +0 -241
- package/pi-extension/tests/cognitive-routing-v2/recovery.test.js +0 -1034
- package/pi-extension/tests/cognitive-routing-v2/render.test.js +0 -244
- package/pi-extension/tests/cognitive-routing-v2/runtime.test.js +0 -423
- package/pi-extension/tests/cognitive-routing-v2/stabilization.test.js +0 -521
- package/pi-extension/tests/cognitive-routing-v2/state.test.js +0 -586
- package/pi-extension/tests/context-virtualization/extension.test.js +0 -775
- package/pi-extension/tests/context-virtualization/projector.test.js +0 -110
- package/pi-extension/tests/context-virtualization/runtime.test.js +0 -230
- package/pi-extension/tests/conversation-history/runtime.test.js +0 -98
- package/pi-extension/tests/conversation-history/search.test.js +0 -97
- package/pi-extension/tests/fixtures/pi-host.js +0 -4
- package/pi-extension/tests/fixtures/routing-native.js +0 -191
- package/pi-extension/tests/integration/mode-free-core.test.js +0 -220
- package/pi-extension/tests/integration/pi-extension.test.js +0 -1447
- package/pi-extension/tests/integration/prompt-architecture.test.js +0 -447
- package/pi-extension/tests/integration/unaffected-regressions.test.js +0 -478
- package/pi-extension/tests/provider-support/astra-boundaries.test.js +0 -75
- package/pi-extension/tests/provider-support/astra.test.js +0 -306
- package/pi-extension/tests/provider-support/cli.test.js +0 -92
- package/pi-extension/tests/provider-support/native.test.js +0 -183
- package/pi-extension/tests/settings/settings-tui.test.js +0 -243
- package/pi-extension/tsconfig.json +0 -16
- package/plugin.json +0 -33
- package/runtime/prompts/context-virtualization.md +0 -3
- package/runtime/prompts/conversation-history.md +0 -3
- package/skills/action-selection/SKILL.md +0 -100
- package/skills/action-selection/references/trajectory-stalls.md +0 -71
- package/skills/bypass/SKILL.md +0 -153
- package/skills/commit-work/SKILL.md +0 -145
- package/skills/commit-work/references/git-state-edges.md +0 -94
- package/skills/commit-work/references/simple-push.md +0 -92
- package/skills/commit-work/references/staging-decisions.md +0 -106
- package/skills/decision-gate/SKILL.md +0 -106
- package/skills/design-for-depth/SKILL.md +0 -117
- package/skills/design-for-depth/references/design-pressure-signals.md +0 -182
- package/skills/design-for-depth/references/implementation-decisions.md +0 -76
- package/skills/design-for-depth/references/interface-design-loop.md +0 -136
- package/skills/design-for-depth/references/module-and-dependency-design.md +0 -147
- package/skills/design-for-depth/references/software-design-philosophy.md +0 -202
- package/skills/design-for-depth/references/state-and-failure-boundaries.md +0 -136
- package/skills/diagnose-failure/SKILL.md +0 -125
- package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +0 -48
- package/skills/diagnose-failure/references/flaky-and-performance-diagnosis.md +0 -51
- package/skills/discuss/SKILL.md +0 -116
- package/skills/evaluate-skill/SKILL.md +0 -219
- package/skills/evaluate-skill/references/evaluation-definition-schema.md +0 -385
- package/skills/evaluate-skill/references/evaluation-design.md +0 -112
- package/skills/evaluate-skill/references/execution-and-evidence.md +0 -90
- package/skills/evaluate-skill/references/review-and-revision.md +0 -92
- package/skills/evaluate-skill/scripts/lib/definitions.mjs +0 -407
- package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +0 -60
- package/skills/evaluate-skill/scripts/lib/grade.mjs +0 -64
- package/skills/evaluate-skill/scripts/lib/runner.mjs +0 -368
- package/skills/evaluate-skill/scripts/pi-guard.mjs +0 -164
- package/skills/evaluate-skill/scripts/skill-eval.mjs +0 -102
- package/skills/execute-work/references/execute-work-edges.md +0 -68
- package/skills/finish-branch/SKILL.md +0 -117
- package/skills/finish-branch/references/integration-options.md +0 -80
- package/skills/handoff/SKILL.md +0 -82
- package/skills/handoff/references/handoff-templates.md +0 -150
- package/skills/launch-work/SKILL.md +0 -116
- package/skills/launch-work/references/launch-readiness.md +0 -85
- package/skills/migration-work/SKILL.md +0 -115
- package/skills/migration-work/references/migration-lifecycle.md +0 -82
- package/skills/release-work/SKILL.md +0 -118
- package/skills/release-work/references/release-evidence.md +0 -78
- package/skills/review-artifact/SKILL.md +0 -142
- package/skills/review-artifact/references/adjudicate-artifact-review.md +0 -101
- package/skills/review-artifact/references/independent-artifact-reviewer-contract.md +0 -159
- package/skills/review-work/references/adjudicate-work-review.md +0 -97
- package/skills/review-work/references/independent-work-reviewer-contract.md +0 -139
- package/skills/review-work/references/security-risk-lens.md +0 -69
- package/skills/setup-freeflow/references/activation-contract.md +0 -109
- package/skills/setup-freeflow/references/host-setup.md +0 -67
- package/skills/simplify-code/SKILL.md +0 -85
- package/skills/simplify-code/references/simplification-patterns.md +0 -70
- package/skills/verify-work/references/browser-runtime-evidence.md +0 -55
- package/skills/verify-work/references/integration-evidence.md +0 -47
- package/skills/verify-work/references/performance-evidence.md +0 -57
- package/skills/workflow/SKILL.md +0 -127
- package/skills/workflow/references/domain-skill-composition.md +0 -43
- package/skills/write-plan/SKILL.md +0 -92
- package/skills/write-plan/references/plan-shapes.md +0 -156
- package/skills/write-skill/references/activation-boundaries.md +0 -104
- package/skills/write-skill/references/agent-first-instructions.md +0 -121
- package/skills/write-skill/references/progressive-disclosure.md +0 -127
- package/skills/write-skill/references/skill-dependency-graphs.md +0 -190
- package/skills/write-spec/SKILL.md +0 -92
- package/skills/write-spec/references/artifact-standards.md +0 -86
- package/skills/write-spec/references/decision-records.md +0 -78
- package/skills/write-spec/references/spec-shapes.md +0 -143
- /package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/budget.js +0 -0
- /package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/evidence.mjs +0 -0
- /package/skills/{evaluate-skill → evaluate-behavior}/scripts/pi-observer.mjs +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Discussion Continuity
|
|
2
2
|
|
|
3
|
-
Read this before preserving discussion across context loss, creating or updating durable
|
|
3
|
+
Read this when discussion state, an emerging route or its Checkpoints must outlast the conversation: before preserving discussion across context loss, creating or updating a Working Record or another durable source from discussion, or carrying a proposed or selected Checkpoint beyond the current context.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This reference is judgment: adapt it to the discussion. Its binding statements restate [Discuss Work](../SKILL.md) or Track Work Rules.
|
|
6
|
+
|
|
7
|
+
Discussion state is not automatically a Working Record, Spec, Plan, checkpoint, or authority. Preserve the required outcome separately from the current approach, and distinguish the user's work agreement from proposals that have not been selected.
|
|
6
8
|
|
|
7
9
|
## Keep It In Conversation When Possible
|
|
8
10
|
|
|
@@ -25,7 +27,7 @@ Prefer natural prose. Use structured fields only when they prevent ambiguity or
|
|
|
25
27
|
|
|
26
28
|
Do not preserve a transcript, repeated rationale, rejected alternatives that no longer matter, or every discussion turn. Retain a rejected approach when losing its reason would cause the next context to repeat it.
|
|
27
29
|
|
|
28
|
-
## Choose Durable
|
|
30
|
+
## Choose A Durable Destination By Purpose
|
|
29
31
|
|
|
30
32
|
Use a durable destination only when losing the state could cause later misalignment:
|
|
31
33
|
|
|
@@ -40,15 +42,7 @@ Do not create an artifact merely because discussion occurred. Prefer an existing
|
|
|
40
42
|
|
|
41
43
|
## Preserve Through Track Work
|
|
42
44
|
|
|
43
|
-
Discuss owns exploration and meaning. [Track Work](../../track-work/SKILL.md) owns the Working Record and its lifecycle.
|
|
44
|
-
|
|
45
|
-
```text
|
|
46
|
-
Discuss
|
|
47
|
-
-> supported state worth preserving
|
|
48
|
-
-> Track Work performs one atomic update
|
|
49
|
-
-> Discuss confirms the preserved meaning
|
|
50
|
-
-> continue discussion or return to Workflow
|
|
51
|
-
```
|
|
45
|
+
Discuss Work owns exploration and meaning. [Track Work](../../track-work/SKILL.md) owns the Working Record and its lifecycle: preserve supported state in one atomic update through it, then confirm the preserved meaning.
|
|
52
46
|
|
|
53
47
|
A Working Record is appropriate when:
|
|
54
48
|
|
|
@@ -60,41 +54,19 @@ A Working Record is appropriate when:
|
|
|
60
54
|
|
|
61
55
|
Preserve only supported state that could affect later interpretation or action. Give each detailed fact one canonical owner. Track Work should store current meaning rather than append discussion chronology.
|
|
62
56
|
|
|
63
|
-
When the initial record need arises from discussion, preserve the state that justified the record in the first authorized atomic update. Do not create an empty shell and lose the decisions, proposals, or uncertainty that made continuity necessary.
|
|
57
|
+
When the initial record need arises from discussion, preserve the state that justified the record in the first authorized atomic update. Do not create an empty shell and lose the decisions, proposals, or uncertainty that made continuity necessary. Once a record exists, use it as working memory during the discussion, updating it at meaningful boundaries (accepted choices, open questions, options still considered, material the user supplies, the route as it emerges) as Track Work describes.
|
|
64
58
|
|
|
65
|
-
When a rough route is useful, preserve provisional Slices and their actual dependencies without pretending the later implementation is settled. Keep the current
|
|
59
|
+
When a rough route is useful, preserve provisional Slices, the Checkpoints between them, and their actual dependencies without pretending the later implementation is settled. Keep the current Slice concrete and later work directional. Use the existing Current Context, Current Work, Future Work, and History fields; do not add a second phase or context-cycle ledger.
|
|
66
60
|
|
|
67
61
|
Preserve the agreed outcome, scope, and user-facing return condition when losing them could interrupt covered work or permit drift. Authorization to investigate or propose a design is not acceptance of its production consequences. When learning changes the approach, retain the question, strongest evidence and limits, remaining uncertainty, artifact disposition, and affected later work—not the prototype's construction history.
|
|
68
62
|
|
|
69
|
-
After preservation, return to
|
|
70
|
-
|
|
71
|
-
## Carry Proposed And Selected Checkpoints
|
|
72
|
-
|
|
73
|
-
A possible checkpoint remains proposed in the current discussion until Workflow selects it.
|
|
74
|
-
|
|
75
|
-
For a proposed checkpoint, preserve only:
|
|
63
|
+
After preservation, return to the discussion unless the user chose another route. Record mutation does not transfer ownership or authorize execution.
|
|
76
64
|
|
|
77
|
-
|
|
78
|
-
Status: Proposed
|
|
79
|
-
Type:
|
|
80
|
-
Purpose:
|
|
81
|
-
Boundary it could protect:
|
|
82
|
-
Authority or selection still needed:
|
|
83
|
-
```
|
|
65
|
+
## Carry Checkpoints On The Route
|
|
84
66
|
|
|
85
|
-
|
|
67
|
+
A commit, publication, review, user decision, or planned handoff that the discussion anticipates is a Checkpoint on the route, not a Slice. With a record, propose it in Future Work using Track Work's Checkpoint types and states: `proposed` while only anticipated, `pending` once the user selects it. Without a record, keep it in the conversation.
|
|
86
68
|
|
|
87
|
-
|
|
88
|
-
Status: Selected
|
|
89
|
-
Type:
|
|
90
|
-
Purpose:
|
|
91
|
-
Due boundary:
|
|
92
|
-
Condition:
|
|
93
|
-
Selection source:
|
|
94
|
-
Authority scope:
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Persist checkpoint state through Track Work only when durable memory is needed. Keep local commit authority separate from push or integration, and keep migration, release, and launch separately controlled.
|
|
69
|
+
Keep local commit authority separate from push or publication, and keep migration, release, and launch separately controlled.
|
|
98
70
|
|
|
99
71
|
## Preserve Re-entry State
|
|
100
72
|
|
|
@@ -111,17 +83,8 @@ Authority or user decision needed:
|
|
|
111
83
|
|
|
112
84
|
Do not restart from zero, rewrite unaffected decisions, or narrate completed work.
|
|
113
85
|
|
|
114
|
-
After context loss, recover the
|
|
86
|
+
After context loss, recover the record as Track Work's "Recover After Context Loss" says before relying on it. Compare current sections and relevant History with current user direction, accepted artifacts, and live evidence. Reconcile affected meaning and dependent future work; do not repeat a disproved approach or preserve a stale plan merely because the record contains it. With intact context, use `resume` or targeted reads only when needed.
|
|
115
87
|
|
|
116
88
|
## Stop
|
|
117
89
|
|
|
118
90
|
Stop preserving when the current meaning and one next useful action can be reconstructed safely.
|
|
119
|
-
|
|
120
|
-
Do not turn continuity into:
|
|
121
|
-
|
|
122
|
-
- a transcript;
|
|
123
|
-
- a mandatory artifact;
|
|
124
|
-
- a second source of authority;
|
|
125
|
-
- a frozen architecture;
|
|
126
|
-
- an automatic checkpoint;
|
|
127
|
-
- a reason to begin execution.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Learning Action
|
|
2
|
+
|
|
3
|
+
Read this when existing evidence cannot settle a material question and running something could: before proposing an experiment or prototype, while running one, and when its evidence comes back.
|
|
4
|
+
|
|
5
|
+
This reference is judgment: adapt it to the question. Its binding statements restate [Discuss Work](../SKILL.md) or [Execute Work](../../execute-work/SKILL.md) Rules.
|
|
6
|
+
|
|
7
|
+
## Decide Whether To Run One
|
|
8
|
+
|
|
9
|
+
Use an experiment or prototype when existing evidence cannot settle a material question and exercising behavior can distinguish the remaining answers. A separate prototype should isolate the uncertainty more safely or economically than changing production; unfamiliarity alone does not require one.
|
|
10
|
+
|
|
11
|
+
If the work is an accepted useful outcome regardless of what it teaches, treat it as delivery work, not an experiment; do not disguise implementation as learning. Incidental learning does not change its authority or acceptance boundary.
|
|
12
|
+
|
|
13
|
+
## Frame It
|
|
14
|
+
|
|
15
|
+
Frame the action before proposing it:
|
|
16
|
+
|
|
17
|
+
- the question and its consequence for the accepted outcome or approach;
|
|
18
|
+
- plausible answers and the observation that would distinguish them;
|
|
19
|
+
- the smallest adequate prototype or observer;
|
|
20
|
+
- permitted effects, environment, and production exclusion;
|
|
21
|
+
- expected evidence and return conditions: question answered, observing limit reached, or further work requiring a different question or expanded scope;
|
|
22
|
+
- what would justify discarding, revising, or proposing promotion.
|
|
23
|
+
|
|
24
|
+
Add a time or cost boundary when repetition or setup could grow; do not demand an exact token prediction. If no adequate observer is available within scope, state the limitation rather than inventing a proof.
|
|
25
|
+
|
|
26
|
+
Check that the agreement covers the framed action, preserve it through [Track Work](../../track-work/SKILL.md) when needed, then run it through Execute Work. Existing authority may already cover the experiment; its name does not create another approval gate.
|
|
27
|
+
|
|
28
|
+
## Run It
|
|
29
|
+
|
|
30
|
+
Answer the one declared question with the least building that can, within the limits the framing set. Report a negative or inconclusive result as plainly as a positive one, and do not polish a prototype toward a favorable answer. A successful demonstration is not production acceptance: never promote exploratory code into production unless that promotion is deliberately selected and its effects authorized.
|
|
31
|
+
|
|
32
|
+
## Assess What It Showed
|
|
33
|
+
|
|
34
|
+
Assess returned evidence against the original question. Negative or inconclusive evidence is a valid result; one failed technique does not prove every alternative impossible. When it reports a new prerequisite, tell a limitation of the observer or chosen approach from a requirement of the intended outcome before recommending more work.
|
|
35
|
+
|
|
36
|
+
Revise only the affected understanding. When continuity matters, preserve the consequence for the task, the remaining uncertainty, and what happens to the exploratory artifacts, as [discussion continuity](discussion-continuity.md) describes. Stop assessing when the supported next direction or the unresolved decision is clear.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Checks and renders Discuss Work's decision list (SKILL.md, "Build The Decision List"), so its format is a tool's job
|
|
3
|
+
// and the agent's attention stays on the choices:
|
|
4
|
+
// validate IDs, states, T -> P links, a default on every plain item, the user's words on agreed items, a reason on
|
|
5
|
+
// changed ones;
|
|
6
|
+
// agreement the reply sent before building: What I'll do / Where I stop / Your decisions / Technical: N;
|
|
7
|
+
// handover the items the hand-over shows: new, changed and default;
|
|
8
|
+
// catch-up after an unattended run: defaults taken, choices waiting, changes, and what ran, from the Working
|
|
9
|
+
// Record's current Slice Material updates (read through Track Work's `working-record.mjs view resume`).
|
|
10
|
+
// Usage: choices.mjs <validate|agreement|handover|catch-up> (--list <file|-> | --record <record.md>)
|
|
11
|
+
// [--do <outcome> --stop <where you stop>] [--show-technical] [--json]
|
|
12
|
+
// --list reads a file or stdin (no Working Record: the list lives in the conversation); --record reads the task's
|
|
13
|
+
// sources/decisions.md beside the record. Each item is one line, "- P1 [state] choice -> default ..." (a technical
|
|
14
|
+
// item "-> serves P1"); other lines are ignored. Every view validates first. Exit code 0 when the list is valid
|
|
15
|
+
// (warnings do not fail it), 1 when it has errors, 2 on a usage error.
|
|
16
|
+
import { spawnSync } from "node:child_process";
|
|
17
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
18
|
+
import { dirname, join, resolve } from "node:path";
|
|
19
|
+
import { fileURLToPath } from "node:url";
|
|
20
|
+
import { parseArgs } from "node:util";
|
|
21
|
+
import { parseChoices, renderChoices } from "./lib/choices.mjs";
|
|
22
|
+
|
|
23
|
+
const USAGE = [
|
|
24
|
+
"Usage: choices.mjs <validate|agreement|handover|catch-up> (--list <file|-> | --record <record.md>)",
|
|
25
|
+
" [--do <outcome> --stop <where you stop>] [--show-technical] [--json]",
|
|
26
|
+
].join("\n");
|
|
27
|
+
const VIEWS = new Set(["validate", "agreement", "handover", "catch-up"]);
|
|
28
|
+
const WORKING_RECORD = resolve(dirname(fileURLToPath(import.meta.url)), "../../track-work/scripts/working-record.mjs");
|
|
29
|
+
|
|
30
|
+
function fail(message) {
|
|
31
|
+
console.error(message);
|
|
32
|
+
process.exit(2);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let parsed;
|
|
36
|
+
try {
|
|
37
|
+
parsed = parseArgs({
|
|
38
|
+
allowPositionals: true,
|
|
39
|
+
options: {
|
|
40
|
+
list: { type: "string" },
|
|
41
|
+
record: { type: "string" },
|
|
42
|
+
do: { type: "string" },
|
|
43
|
+
stop: { type: "string" },
|
|
44
|
+
"show-technical": { type: "boolean", default: false },
|
|
45
|
+
json: { type: "boolean", default: false },
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
} catch (error) {
|
|
49
|
+
fail(`${error.message}\n${USAGE}`);
|
|
50
|
+
}
|
|
51
|
+
const { values, positionals } = parsed;
|
|
52
|
+
const [view] = positionals;
|
|
53
|
+
if (!VIEWS.has(view) || positionals.length !== 1) fail(USAGE);
|
|
54
|
+
if (Boolean(values.list) === Boolean(values.record)) fail(`give --list <file|-> or --record <record.md>\n${USAGE}`);
|
|
55
|
+
if (view === "agreement" && (!values.do || !values.stop)) fail(`agreement needs --do and --stop\n${USAGE}`);
|
|
56
|
+
|
|
57
|
+
let listText;
|
|
58
|
+
let recordView = null;
|
|
59
|
+
if (values.record) {
|
|
60
|
+
const record = resolve(values.record);
|
|
61
|
+
if (!existsSync(record)) fail(`no such record: ${values.record}`);
|
|
62
|
+
const listPath = join(dirname(record), "sources", "decisions.md");
|
|
63
|
+
if (!existsSync(listPath)) fail(`no decision list at ${listPath}; Track Work keeps it there`);
|
|
64
|
+
listText = readFileSync(listPath, "utf8");
|
|
65
|
+
if (view === "catch-up") {
|
|
66
|
+
const run = spawnSync(process.execPath, [WORKING_RECORD, "view", "resume", "--record", record], {
|
|
67
|
+
encoding: "utf8",
|
|
68
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
69
|
+
});
|
|
70
|
+
if (run.status !== 0) fail(`working-record.mjs view resume failed: ${(run.stderr || run.stdout).trim()}`);
|
|
71
|
+
recordView = run.stdout;
|
|
72
|
+
}
|
|
73
|
+
} else if (values.list === "-") listText = readFileSync(0, "utf8");
|
|
74
|
+
else if (!existsSync(resolve(values.list))) fail(`no such list: ${values.list}`);
|
|
75
|
+
else listText = readFileSync(resolve(values.list), "utf8");
|
|
76
|
+
|
|
77
|
+
const list = parseChoices(listText);
|
|
78
|
+
const notes = [...list.errors.map((each) => `error: ${each}`), ...list.warnings.map((each) => `warning: ${each}`)];
|
|
79
|
+
if (!list.ok) {
|
|
80
|
+
if (values.json)
|
|
81
|
+
console.log(
|
|
82
|
+
JSON.stringify({ command: `choices ${view}`, ok: false, errors: list.errors, warnings: list.warnings }, null, 2),
|
|
83
|
+
);
|
|
84
|
+
else console.log(`Decision list has ${list.errors.length} error(s):\n${notes.map((each) => `- ${each}`).join("\n")}`);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const rendered = renderChoices(view, list, {
|
|
88
|
+
outcome: values.do,
|
|
89
|
+
stop: values.stop,
|
|
90
|
+
showTechnical: values["show-technical"],
|
|
91
|
+
recordText: recordView,
|
|
92
|
+
});
|
|
93
|
+
if (values.json)
|
|
94
|
+
console.log(
|
|
95
|
+
JSON.stringify(
|
|
96
|
+
{ command: `choices ${view}`, ok: true, warnings: list.warnings, ...rendered.data, text: rendered.text },
|
|
97
|
+
null,
|
|
98
|
+
2,
|
|
99
|
+
),
|
|
100
|
+
);
|
|
101
|
+
else console.log(`${notes.length ? `${notes.map((each) => `- ${each}`).join("\n")}\n\n` : ""}${rendered.text}`);
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// Discuss Work's decision list as a record file: the task's sources/decisions.md, or a list given on stdin or as a file
|
|
2
|
+
// when there is no Working Record. One line per item, "- P1 [state] choice -> default ...", other lines ignored
|
|
3
|
+
// (Discuss Work, "Build The Decision List").
|
|
4
|
+
// validate IDs, states, T -> P links, a default on every plain item, the user's words on agreed items, a reason on
|
|
5
|
+
// changed ones;
|
|
6
|
+
// agreement the reply sent before building: What I'll do / Where I stop / Your decisions / Technical: N;
|
|
7
|
+
// handover the items a hand-over shows: new, changed and default;
|
|
8
|
+
// catch-up after an unattended run: defaults taken, choices waiting, changes, and what ran (the record's current
|
|
9
|
+
// Slice Material updates).
|
|
10
|
+
|
|
11
|
+
export const CHOICE_STATES = new Set(["proposed", "agreed", "default", "changed", "new", "dropped"]);
|
|
12
|
+
const ITEM = /^\s*[-*]\s+([A-Za-z]+\d+)\s+\[([^\]]*)\]\s+(.*)$/;
|
|
13
|
+
|
|
14
|
+
export function parseChoices(text) {
|
|
15
|
+
const items = [];
|
|
16
|
+
const errors = [];
|
|
17
|
+
const warnings = [];
|
|
18
|
+
text.split(/\r?\n/).forEach((raw, index) => {
|
|
19
|
+
const match = ITEM.exec(raw);
|
|
20
|
+
if (!match) return;
|
|
21
|
+
const [, id, state, rest] = match;
|
|
22
|
+
const arrow = rest.indexOf("->");
|
|
23
|
+
const choice = (arrow === -1 ? rest : rest.slice(0, arrow)).trim();
|
|
24
|
+
const tail = arrow === -1 ? "" : rest.slice(arrow + 2).trim();
|
|
25
|
+
// A technical item states its choice and the plain item it serves: "T1 [default] FIFO array -> serves P1".
|
|
26
|
+
const serves = /^(?:serves\s+)?(P\d+)\b/i.exec(tail);
|
|
27
|
+
items.push({
|
|
28
|
+
line: index + 1,
|
|
29
|
+
id,
|
|
30
|
+
kind: id[0] === "P" ? "plain" : id[0] === "T" ? "technical" : "unknown",
|
|
31
|
+
state,
|
|
32
|
+
choice,
|
|
33
|
+
default: serves ? choice : tail,
|
|
34
|
+
serves: serves?.[1] ?? null,
|
|
35
|
+
quote: /\bYou:\s*["“]/.test(rest),
|
|
36
|
+
reason: /\b(because|why|was|since|instead|reason)\b/i.test(tail),
|
|
37
|
+
text: rest.trim(),
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const seen = new Map();
|
|
42
|
+
for (const item of items) {
|
|
43
|
+
const where = `line ${item.line} ${item.id}`;
|
|
44
|
+
if (!/^[PT][1-9]\d*$/.test(item.id)) errors.push(`${where}: ID must be P<n> or T<n>`);
|
|
45
|
+
if (seen.has(item.id)) errors.push(`${where}: duplicate ID (first at line ${seen.get(item.id)})`);
|
|
46
|
+
else seen.set(item.id, item.line);
|
|
47
|
+
if (!CHOICE_STATES.has(item.state))
|
|
48
|
+
errors.push(`${where}: state "${item.state}" is not one of ${[...CHOICE_STATES].join(", ")}`);
|
|
49
|
+
if (!item.choice) errors.push(`${where}: names no choice`);
|
|
50
|
+
if (item.kind === "plain" && !item.default)
|
|
51
|
+
errors.push(`${where}: has no default after "->" (what matches existing behavior and is easiest to reverse)`);
|
|
52
|
+
if (item.kind === "technical" && !item.serves)
|
|
53
|
+
errors.push(`${where}: a technical item names the plain item it serves ("-> serves P1")`);
|
|
54
|
+
if (item.state === "agreed" && !item.quote) warnings.push(`${where}: agreed without the user's words (You: "...")`);
|
|
55
|
+
if (item.state === "changed" && !item.reason) warnings.push(`${where}: changed without saying why`);
|
|
56
|
+
}
|
|
57
|
+
for (const item of items.filter((each) => each.serves)) {
|
|
58
|
+
const target = items.find((each) => each.id === item.serves);
|
|
59
|
+
if (!target) errors.push(`line ${item.line} ${item.id}: serves ${item.serves}, which is not in the list`);
|
|
60
|
+
else if (target.state === "dropped" && item.state !== "dropped")
|
|
61
|
+
warnings.push(`line ${item.line} ${item.id}: serves ${item.serves}, which is dropped`);
|
|
62
|
+
}
|
|
63
|
+
if (!items.length) errors.push('no items found: each item is a line "- P1 [state] choice -> default"');
|
|
64
|
+
const firstTechnical = items.findIndex((item) => item.kind === "technical");
|
|
65
|
+
if (firstTechnical !== -1 && items.slice(firstTechnical).some((item) => item.kind === "plain"))
|
|
66
|
+
warnings.push("plain items come first; a P item follows a T item");
|
|
67
|
+
return { items, errors, warnings, ok: errors.length === 0 };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const itemLine = (item) => `- ${item.id} [${item.state}] ${item.text}`;
|
|
71
|
+
const byState = (items, states) => items.filter((item) => states.includes(item.state));
|
|
72
|
+
|
|
73
|
+
// The current Slice's Material updates: what ran or changed while no one was answering.
|
|
74
|
+
function currentSliceUpdates(recordText) {
|
|
75
|
+
const lines = recordText.split(/\r?\n/);
|
|
76
|
+
const start = lines.findIndex((each) => /^### Current Slice\s*$/.test(each));
|
|
77
|
+
if (start === -1) return { slice: "no Current Slice", updates: [] };
|
|
78
|
+
const end = lines.findIndex((each, index) => index > start && /^#{2,3} /.test(each));
|
|
79
|
+
const slice = lines.slice(start, end === -1 ? undefined : end);
|
|
80
|
+
const title = slice.find((each) => /^#### S-\d+/.test(each));
|
|
81
|
+
const at = slice.findIndex((each) => /^##### Material updates\s*$/.test(each));
|
|
82
|
+
const updates = at === -1 ? [] : slice.slice(at + 1).filter((each) => /^\s*-\s+\S/.test(each));
|
|
83
|
+
return {
|
|
84
|
+
slice: title ? title.replace(/^####\s+/, "") : "no Current Slice",
|
|
85
|
+
updates: updates.map((each) => each.trim().replace(/^-\s+/, "")),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Renders one view; returns { text, data }. The caller validates first.
|
|
90
|
+
export function renderChoices(view, parsed, { outcome, stop, showTechnical = false, recordText = null } = {}) {
|
|
91
|
+
const { items } = parsed;
|
|
92
|
+
const plain = items.filter((item) => item.kind === "plain" && item.state !== "dropped");
|
|
93
|
+
const technical = items.filter((item) => item.kind === "technical" && item.state !== "dropped");
|
|
94
|
+
if (view === "validate")
|
|
95
|
+
return { text: `Decision list valid: ${items.length} item(s).`, data: { items: items.length } };
|
|
96
|
+
if (view === "agreement") {
|
|
97
|
+
const open = plain.filter((item) => item.state !== "agreed");
|
|
98
|
+
const pad = " ";
|
|
99
|
+
const decisions = open.length
|
|
100
|
+
? open.map(
|
|
101
|
+
(item, index) =>
|
|
102
|
+
`${index ? pad : ""}${index + 1}. ${item.choice}${/[?.!]$/.test(item.choice) ? "" : "?"} I'd go with ${item.default}`,
|
|
103
|
+
)
|
|
104
|
+
: ["none: the request and the repository settle every choice the user would see."];
|
|
105
|
+
const technicalLine = showTechnical
|
|
106
|
+
? [
|
|
107
|
+
`Technical: ${technical.map((item, index) => `${index ? pad : ""}${item.id} ${item.choice} (serves ${item.serves})`).join("\n") || "none"}`,
|
|
108
|
+
]
|
|
109
|
+
: technical.length
|
|
110
|
+
? [
|
|
111
|
+
`Technical: ${technical.length} more choice${technical.length === 1 ? "" : "s"}; say "show technical" to see them.`,
|
|
112
|
+
]
|
|
113
|
+
: [];
|
|
114
|
+
const text = [
|
|
115
|
+
`What I'll do: ${outcome}`,
|
|
116
|
+
`Where I stop: ${stop}`,
|
|
117
|
+
`Your decisions: ${decisions.join("\n")}`,
|
|
118
|
+
...technicalLine,
|
|
119
|
+
].join("\n");
|
|
120
|
+
return { text, data: { decisions: open.map((item) => item.id), technical: technical.length } };
|
|
121
|
+
}
|
|
122
|
+
if (view === "handover") {
|
|
123
|
+
const shown = byState(items, ["new", "changed", "default"]);
|
|
124
|
+
return {
|
|
125
|
+
text: shown.length
|
|
126
|
+
? `Choices you have not seen (${shown.length}):\n${shown.map(itemLine).join("\n")}`
|
|
127
|
+
: "No new, changed or default choices: every item was agreed or dropped.",
|
|
128
|
+
data: { shown: shown.map((item) => item.id) },
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// catch-up
|
|
132
|
+
const defaults = byState(items, ["default"]);
|
|
133
|
+
const waiting = byState(items, ["proposed", "new"]);
|
|
134
|
+
const changed = byState(items, ["changed"]);
|
|
135
|
+
const out = [`Defaults taken (${defaults.length}):`, ...(defaults.length ? defaults.map(itemLine) : ["- none"])];
|
|
136
|
+
out.push(
|
|
137
|
+
"",
|
|
138
|
+
`Choices waiting for you (${waiting.length}):`,
|
|
139
|
+
...(waiting.length ? waiting.map(itemLine) : ["- none"]),
|
|
140
|
+
);
|
|
141
|
+
if (changed.length) out.push("", `Changed while you were away (${changed.length}):`, ...changed.map(itemLine));
|
|
142
|
+
const ran = recordText === null ? null : currentSliceUpdates(recordText);
|
|
143
|
+
if (ran)
|
|
144
|
+
out.push(
|
|
145
|
+
"",
|
|
146
|
+
`What ran (${ran.slice}, Material updates: ${ran.updates.length}):`,
|
|
147
|
+
...(ran.updates.length ? ran.updates.map((each) => `- ${each}`) : ["- nothing recorded"]),
|
|
148
|
+
);
|
|
149
|
+
else out.push("", "What ran: no Working Record; account for it from the conversation.");
|
|
150
|
+
return {
|
|
151
|
+
text: out.join("\n"),
|
|
152
|
+
data: {
|
|
153
|
+
defaults: defaults.map((item) => item.id),
|
|
154
|
+
waiting: waiting.map((item) => item.id),
|
|
155
|
+
changed: changed.map((item) => item.id),
|
|
156
|
+
...(ran ? { slice: ran.slice, ran: ran.updates } : {}),
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: evaluate-behavior
|
|
3
|
+
description: "Use when testing, evaluating or comparing how an agent behaves: whether a skill triggers, whether a change to a prompt, skill, model, setting or extension changes outcomes, measuring a reviewer or checker, or benchmarking agents on coding tasks, conversations or pipelines. Also use when writing or checking an eval's JSON files, running an eval and reading its results, and deciding what a result can claim, how many cases and trials it needs and what it costs."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Evaluate Behavior
|
|
7
|
+
|
|
8
|
+
Determine whether a declared change to an agent's setup changes its behavior as intended under declared pressure. Evidence outranks confident prose.
|
|
9
|
+
|
|
10
|
+
A **configuration** is everything that can shape the agent's behavior: host, model, skills, instruction files, and host extensions and settings. A **group** asks one behavioral question by running named **arms** of one configuration on the same task, usually `baseline` (the **reference**: the setup without the change, such as no target skill, the previous commit, or the setting off) and `candidate` (the same setup with exactly the declared change, its **component**); a single arm measures one setup alone. The **subject** is the agent performing the task in one arm. The **evaluator** isolates subjects and preserves canonical evidence; the **deterministic grader** derives fixed facts after the run is saved; a **judge** is a separate model whose answers are **judged evidence**. A **suite** runs ordered groups and may declare a **decision** rule that turns their results into a verdict.
|
|
11
|
+
|
|
12
|
+
Evaluate Behavior does not change what it evaluates, claim readiness, or choose adoption. The component's owner revises it: [Write Skill](../write-skill/SKILL.md) for a skill or other instruction text; extension code goes to its owner, and a model, setting or extension choice to the user.
|
|
13
|
+
|
|
14
|
+
The **Rules** below are binding; if one cannot be met, stop and say why. Everything else is **judgment**: follow its stated goal, and adapt when a different choice serves that goal better.
|
|
15
|
+
|
|
16
|
+
## Routes
|
|
17
|
+
|
|
18
|
+
| Situation | Go to |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| The question, evidence class, arms, pressure or component; what the result can claim, the decision rule, cases and trials, noise, judge counts, cost | [design and measurement](references/design-and-measurement.md) |
|
|
21
|
+
| Measuring a reviewer, checker, or other detector | its [Defect Suites](references/design-and-measurement.md#defect-suites) |
|
|
22
|
+
| Writing or checking group, suite, or configuration JSON | [authoring](references/authoring.md) |
|
|
23
|
+
| A coding task (hidden tests, declared commands, a shell, a container, network), or the Claude Code host | [coding tasks](references/coding-tasks.md) |
|
|
24
|
+
| A conversation, a pipeline, a rubric and judges, or a runtime profile | [conversations, pipelines and judges](references/conversations-pipelines-judges.md) |
|
|
25
|
+
| Running the evaluator and reading its results; evidence that conflicts, the failed boundary, a revision target, or rerun scope | [running and evidence](references/running-and-evidence.md), and `skill-eval --help` |
|
|
26
|
+
| Reviewing a definition before paying for its runs | Review Work's [Eval Definition Review](../review-work/references/evals-and-judges.md#eval-definition-review) |
|
|
27
|
+
| Choosing a judge or relying on its answers | Review Work's [Judge Contract](../review-work/references/evals-and-judges.md#judge-contract) |
|
|
28
|
+
|
|
29
|
+
## Rules
|
|
30
|
+
|
|
31
|
+
- Never mutate canonical evidence or erase an unfavorable result. Preserve partial and infrastructure evidence without converting unavailable behavior into pass or fail.
|
|
32
|
+
- Never fabricate behavioral evidence. Missing evidence stays unavailable.
|
|
33
|
+
- Compare a change only against an exact immutable baseline, such as a commit. If none exists, preserve the current state first (for a skill or instruction text, through Write Skill); never create a baseline by editing what is being evaluated.
|
|
34
|
+
- Keep deterministic criteria, grader files, review questions and rubric references out of subject prompts, the fixture and declared subject context.
|
|
35
|
+
- Declare every part of the configuration that can change behavior. Ambient installation, settings, or context are not declared composition.
|
|
36
|
+
- Claim only what the evidence class observed; one class never proves another.
|
|
37
|
+
- Never write that one arm beats another without paired runs on the same cases and a suite `decision` declared before the run; the evaluator reports "beats" only from that rule. Below that, report counts.
|
|
38
|
+
- Never cite a dry run as evidence. When a run is refused for uncommitted inputs, commit the candidate and the definition, or keep the run as a dry run for your own checking only.
|
|
39
|
+
- Never change the component under test while evaluating it. Return one measured revision target to its owner.
|
|
40
|
+
- After a behavioral change, rerun the complete fixed group with every arm. Never hand-pick an earlier run as the fresh counterpart or rerun only the preferred arm; an earlier run may stand in only through `--reuse`, which matches the arm's exact inputs, and the report names it as reused.
|
|
41
|
+
- Judged evidence is its own class. Judge answers are stored apart from run and deterministic grade files, with each judge's identity and calibration status, and count toward a claim only through a decision rule declared before the run. They never change run or grade files and never establish readiness.
|
|
42
|
+
- Installing anything an eval needs, such as the VM runtime behind a confined shell, is the user's decision. Relay the evaluator's exact refusal and ask before installing; never install silently.
|
|
43
|
+
- Never invoke archived evaluators.
|
|
44
|
+
- Never clear a run's transcript-scan flag on your own judgment. Show the user the flag and its evidence, and run `skill-eval clear` only with their decision and their reason.
|
|
45
|
+
|
|
46
|
+
## Design The Smallest Valid Comparison
|
|
47
|
+
|
|
48
|
+
Goal: the arms differ only in the component, under pressure strong enough to show it, in a run no larger than the claim needs.
|
|
49
|
+
|
|
50
|
+
Answer from saved evidence or an existing group when they still fit (the same question, pressure, arms and fixed criteria); for a draft-only request, use Write Skill. Do not rerun merely to demonstrate process. Name one behavioral question, its evidence class, and the strongest claim the result must support: can do X, a rate on this suite, or A beats B; readiness is beyond Evaluate Behavior. Activation, first-read body and nearby behavior are questions about skills; for other components, check delivery, behavior and artifact outcome first.
|
|
51
|
+
|
|
52
|
+
Choose the component:
|
|
53
|
+
|
|
54
|
+
| Change under test | Component | Baseline |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| A new or revised skill | `subject.skills`, `subject.target`, `subject.source` | no target, or the previous commit |
|
|
57
|
+
| An instruction or context file | `subject.context` | without the file, or its previous commit |
|
|
58
|
+
| A model or thinking level | `model.model`, `model.thinking` | the model in use |
|
|
59
|
+
| An extension or plugin, or a host setting | `host.extensions`, `host.settings` | without it, or its current version or value |
|
|
60
|
+
|
|
61
|
+
The task's fixture and the runtime are shared by every arm and cannot be the component.
|
|
62
|
+
|
|
63
|
+
Choose the mode by where the behavior happens; modes combine:
|
|
64
|
+
|
|
65
|
+
- **Compare:** arms run the same task once per trial; the default.
|
|
66
|
+
- **Noise check:** `component: []` with identical arms; their gap is the floor a real difference must clear.
|
|
67
|
+
- **Measure:** one arm; a rate on this suite, never a comparison.
|
|
68
|
+
- **Conversation:** a simulated user who knows only its card answers back.
|
|
69
|
+
- **Pipeline:** ordered stages, each a subject that sees only what it declares.
|
|
70
|
+
- **Coding task:** hidden tests or other commands grade the changed repository.
|
|
71
|
+
- **Judged evaluation:** judges answer a rubric for each run alone, blind to its arm.
|
|
72
|
+
|
|
73
|
+
Before subject output exists:
|
|
74
|
+
|
|
75
|
+
1. fix one behavioral question;
|
|
76
|
+
2. fix deterministic expectations, rubric and review questions;
|
|
77
|
+
3. preserve the earliest natural prompt or strongest pressure capable of distinguishing behavior;
|
|
78
|
+
4. declare each arm's exact identity, and the suite's decision rule when the claim is a comparison;
|
|
79
|
+
5. keep prompt or turns, fixture, tools, and every configuration part other than the component fixed, along with the criteria;
|
|
80
|
+
6. run one group or an ordered suite;
|
|
81
|
+
7. inspect canonical evidence and deterministic facts before judging meaning;
|
|
82
|
+
8. classify the failed boundary before proposing revision.
|
|
83
|
+
|
|
84
|
+
If every arm passes, the pressure may be weak or the baseline already sufficient. If every arm fails, distinguish component, fixture, dependency, environment, host, isolation, and criterion failures before revising anything.
|
|
85
|
+
|
|
86
|
+
## Run And Read The Evidence
|
|
87
|
+
|
|
88
|
+
Run the canonical [skill evaluator](scripts/skill-eval.mjs) from the definition root: `node <evaluate-behavior-directory>/scripts/skill-eval.mjs <run|check-tasks|view|review|clear> ...`. Run `check-tasks`, which calls no model, before spending on a coding task; use `--trials <n>` before claiming a difference, and `--max-cost` when a batch could spend more than intended. Canonical results live under `<definition-root>/.skill-eval/runs/<result-id>`; a view is a projection of them. A failed check is behavioral evidence; a transition such as `fail-to-pass` is a fact, not a verdict.
|
|
89
|
+
|
|
90
|
+
## Report And Stop
|
|
91
|
+
|
|
92
|
+
Report:
|
|
93
|
+
|
|
94
|
+
- what ran;
|
|
95
|
+
- each arm's exact identity, and which is the reference;
|
|
96
|
+
- selected groups and arms, and any run reused from an earlier result;
|
|
97
|
+
- deterministic results, with case and trial counts and pass^k;
|
|
98
|
+
- metrics that bear on the question, such as cost, turns or duration per arm;
|
|
99
|
+
- the decision's verdict, with its split, p and rule, when the suite declares one, and otherwise the claim class reached;
|
|
100
|
+
- judged evidence apart from deterministic results, with each judge's identity and calibration status;
|
|
101
|
+
- infrastructure failures, invalid runs with their reasons, runs held for uncleared transcript flags, cancellation, or unavailable evidence;
|
|
102
|
+
- viewed scope and canonical result paths;
|
|
103
|
+
- what the evidence proves;
|
|
104
|
+
- what it does not prove;
|
|
105
|
+
- any supported failed boundary or revision target.
|
|
106
|
+
|
|
107
|
+
Stop rather than overclaim when required delivery, activation, first-read, composition, retained-use, isolation, artifact, or host evidence is unavailable. The user decides whether to revise, adopt, or reject the change.
|