@entelligentsia/forgecli 1.0.2 → 1.0.10
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/CHANGELOG.md +67 -0
- package/README.md +2 -1
- package/dist/CHANGELOG-forge-plugin.md +124 -0
- package/dist/CHANGELOG-pi.md +94 -0
- package/dist/extensions/forgecli/audience-gate.js +1 -1
- package/dist/extensions/forgecli/audience-gate.js.map +1 -1
- package/dist/extensions/forgecli/fix-bug.d.ts +1 -2
- package/dist/extensions/forgecli/fix-bug.js +678 -609
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-artifact-tool.js +42 -7
- package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +17 -0
- package/dist/extensions/forgecli/forge-subagent.js +31 -12
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +6 -0
- package/dist/extensions/forgecli/forge-tools.js +71 -8
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/run-task.js +461 -391
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +12 -0
- package/dist/extensions/forgecli/session-registry.js +23 -0
- package/dist/extensions/forgecli/session-registry.js.map +1 -1
- package/dist/extensions/forgecli/subagent/caller-context.d.ts +35 -11
- package/dist/extensions/forgecli/subagent/caller-context.js +49 -21
- package/dist/extensions/forgecli/subagent/caller-context.js.map +1 -1
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.d.ts +66 -0
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.js +66 -0
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.js.map +1 -0
- package/dist/extensions/forgecli/subagent/phase-guard.d.ts +34 -0
- package/dist/extensions/forgecli/subagent/phase-guard.js +149 -0
- package/dist/extensions/forgecli/subagent/phase-guard.js.map +1 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.d.ts +2 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.js +39 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.js.map +1 -0
- package/dist/extensions/forgecli/thread-switcher.js +2 -2
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/viewport-events.d.ts +4 -0
- package/dist/extensions/forgecli/viewport-events.js +18 -1
- package/dist/extensions/forgecli/viewport-events.js.map +1 -1
- package/dist/extensions/forgecli/viewport-renderer.d.ts +12 -2
- package/dist/extensions/forgecli/viewport-renderer.js +8 -6
- package/dist/extensions/forgecli/viewport-renderer.js.map +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/store-cli-verbs.md +18 -3
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +4 -5
- package/dist/forge-payload/.base-pack/workflows/collator_agent.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +2 -3
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +10 -28
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -2
- package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +41 -47
- package/dist/forge-payload/.base-pack/workflows/triage.md +190 -0
- package/dist/forge-payload/.base-pack/workflows/validate_task.md +2 -3
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/_defs/locator.schema.json +13 -0
- package/dist/forge-payload/.schemas/bug.schema.json +1 -0
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/migrations.json +72 -0
- package/dist/forge-payload/.schemas/sprint.schema.json +1 -0
- package/dist/forge-payload/.schemas/task.schema.json +1 -0
- package/dist/forge-payload/integrity.json +3 -3
- package/dist/forge-payload/meta/fragments/tool-discipline.md +21 -2
- package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +18 -3
- package/dist/forge-payload/meta/workflows/meta-approve.md +4 -5
- package/dist/forge-payload/meta/workflows/meta-bug-triage.md +210 -0
- package/dist/forge-payload/meta/workflows/meta-collate.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-commit.md +2 -3
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +10 -28
- package/dist/forge-payload/meta/workflows/meta-implement.md +3 -2
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +41 -47
- package/dist/forge-payload/meta/workflows/meta-validate.md +2 -3
- package/dist/forge-payload/schemas/_defs/locator.schema.json +13 -0
- package/dist/forge-payload/schemas/bug.schema.json +1 -0
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/sprint.schema.json +1 -0
- package/dist/forge-payload/schemas/structure-manifest.json +22 -2
- package/dist/forge-payload/schemas/task.schema.json +1 -0
- package/dist/forge-payload/tools/artifact-store.cjs +242 -0
- package/dist/forge-payload/tools/artifact.cjs +69 -100
- package/dist/forge-payload/tools/lib/artifact-kinds.cjs +95 -0
- package/dist/forge-payload/tools/lib/store-nlp.cjs +6 -0
- package/dist/forge-payload/tools/lib/store-query-exec.cjs +39 -5
- package/dist/forge-payload/tools/lib/suggest.cjs +2 -1
- package/dist/forge-payload/tools/preflight-gate.cjs +55 -5
- package/dist/forge-payload/tools/store-cli.cjs +50 -15
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +5 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +81 -18
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +19 -24
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +14 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +22 -8
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/README.md +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +374 -122
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +424 -232
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +38 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +21 -12
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +6 -10
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.js +5 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js +3 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js +2 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +159 -78
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +16 -11
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +4 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +6 -10
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/stream.js +14 -2
- package/node_modules/@earendil-works/pi-ai/dist/stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +14 -4
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js +34 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts +9 -7
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js +8 -7
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts +10 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js +179 -79
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +94 -0
- package/node_modules/@earendil-works/pi-coding-agent/README.md +9 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +27 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +15 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +5 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +28 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +18 -24
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +8 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +7 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +65 -13
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts +9 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js +134 -11
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +10 -6
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts +6 -7
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +75 -28
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +14 -9
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +0 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +7 -10
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +5 -7
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +6 -7
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts +5 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js +17 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +5 -6
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +69 -16
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js +118 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +1 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +2 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +59 -6
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js +10 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +3 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.d.ts +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.js +13 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.js +7 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +13 -10
- package/node_modules/@earendil-works/pi-coding-agent/docs/development.md +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +12 -6
- package/node_modules/@earendil-works/pi-coding-agent/docs/models.md +25 -12
- package/node_modules/@earendil-works/pi-coding-agent/docs/providers.md +13 -5
- package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +2 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/sdk.md +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/session-format.md +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/sessions.md +8 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +7 -3
- package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/tui.md +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +9 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/README.md +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/index.ts +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/index.ts +54 -3
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/git-merge-and-resolve.ts +115 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/input-transform-streaming.ts +39 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +443 -61
- package/node_modules/@earendil-works/pi-coding-agent/package.json +6 -6
- package/node_modules/@earendil-works/pi-tui/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +24 -83
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.js +7 -55
- package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts +7 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +12 -2
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +34 -7
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +33 -10
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +172 -37
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +6 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.js +27 -15
- package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts +25 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js +96 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js.map +1 -0
- package/node_modules/@earendil-works/pi-tui/package.json +2 -2
- package/node_modules/@entelligentsia/forge-compress/LICENSE +21 -0
- package/node_modules/@entelligentsia/forge-compress/README.md +85 -0
- package/node_modules/@entelligentsia/forge-compress/dist/compressor.d.ts +6 -0
- package/node_modules/@entelligentsia/forge-compress/dist/compressor.js +137 -0
- package/node_modules/@entelligentsia/forge-compress/dist/entropy.d.ts +3 -0
- package/node_modules/@entelligentsia/forge-compress/dist/entropy.js +99 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/entity.d.ts +8 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/entity.js +149 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/index.d.ts +7 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/index.js +4 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/markdown.d.ts +5 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/markdown.js +92 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/query.d.ts +7 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/query.js +60 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/validate.d.ts +1 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/validate.js +82 -0
- package/node_modules/@entelligentsia/forge-compress/dist/index.d.ts +6 -0
- package/node_modules/@entelligentsia/forge-compress/dist/index.js +5 -0
- package/node_modules/@entelligentsia/forge-compress/dist/progressive.d.ts +1 -0
- package/node_modules/@entelligentsia/forge-compress/dist/progressive.js +108 -0
- package/node_modules/@entelligentsia/forge-compress/dist/strip.d.ts +4 -0
- package/node_modules/@entelligentsia/forge-compress/dist/strip.js +55 -0
- package/node_modules/@entelligentsia/forge-compress/dist/tokens.d.ts +2 -0
- package/node_modules/@entelligentsia/forge-compress/dist/tokens.js +17 -0
- package/node_modules/@entelligentsia/forge-compress/package.json +45 -0
- package/node_modules/@entelligentsia/forge-compress/src/__tests__/compress.test.ts +409 -0
- package/node_modules/@entelligentsia/forge-compress/src/compressor.ts +147 -0
- package/node_modules/@entelligentsia/forge-compress/src/entropy.ts +105 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/entity.ts +184 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/index.ts +10 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/markdown.ts +122 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/query.ts +105 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/validate.ts +86 -0
- package/node_modules/@entelligentsia/forge-compress/src/index.ts +22 -0
- package/node_modules/@entelligentsia/forge-compress/src/progressive.ts +123 -0
- package/node_modules/@entelligentsia/forge-compress/src/strip.ts +58 -0
- package/node_modules/@entelligentsia/forge-compress/src/tokens.ts +19 -0
- package/node_modules/@mariozechner/clipboard/Cargo.toml +3 -3
- package/node_modules/@mariozechner/clipboard/index.d.ts +34 -20
- package/node_modules/@mariozechner/clipboard/index.js +546 -257
- package/node_modules/@mariozechner/clipboard/package.json +5 -6
- package/node_modules/@mariozechner/clipboard/package.json.prepack-backup +14 -14
- package/node_modules/@mariozechner/clipboard/src/lib.rs +4 -9
- package/node_modules/@mariozechner/clipboard-linux-x64-gnu/clipboard.linux-x64-gnu.node +0 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-gnu/package.json +2 -2
- package/package.json +11 -16
- package/dist/forge-payload/.base-pack/commands/quiz-agent.md +0 -6
- package/dist/forge-payload/.base-pack/commands/retrospective.md +0 -6
- package/dist/forge-payload/.base-pack/commands/sprint-intake.md +0 -6
- package/dist/forge-payload/.base-pack/commands/sprint-plan.md +0 -6
- package/dist/forge-payload/commands/calibrate.md +0 -10
- package/dist/forge-payload/commands/materialize.md +0 -119
- package/dist/forge-payload/commands/migrate.md +0 -12
- package/dist/forge-payload/commands/quiz-agent.md +0 -6
- package/dist/forge-payload/commands/regenerate.md +0 -6
- package/dist/forge-payload/commands/store-query.md +0 -6
- package/dist/forge-payload/commands/store-repair.md +0 -6
- package/dist/forge-payload/commands/update-tools.md +0 -10
- package/dist/forge-payload/meta/templates/meta-retrospective.md +0 -28
- package/dist/forge-payload/tools/prompts/sprint-plan-prompt.md +0 -70
- package/dist/forge-payload/tools/schemas/task-list.schema.json +0 -53
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts +0 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js +0 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts +0 -20
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js +0 -92
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts +0 -18
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js +0 -42
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts +0 -10
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js +0 -31
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts +0 -30
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js +0 -170
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts +0 -26
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js +0 -90
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js.map +0 -1
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +0 -3
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/clipboard.linux-x64-musl.node +0 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +0 -25
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mariozechner/clipboard",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.9",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"napi": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"url": "https://github.com/badlogic/clipboard.git"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@napi-rs/cli": "
|
|
26
|
+
"@napi-rs/cli": "3.7.0",
|
|
27
27
|
"ava": "^6.0.1"
|
|
28
28
|
},
|
|
29
29
|
"ava": {
|
|
@@ -36,13 +36,12 @@
|
|
|
36
36
|
"artifacts": "napi artifacts",
|
|
37
37
|
"build": "napi build --platform --release",
|
|
38
38
|
"build:debug": "napi build --platform",
|
|
39
|
-
"prepublishOnly": "napi
|
|
39
|
+
"prepublishOnly": "napi pre-publish -t npm",
|
|
40
40
|
"test": "ava",
|
|
41
|
-
"universal": "napi
|
|
41
|
+
"universal": "napi universalize -o artifacts",
|
|
42
42
|
"version": "napi version"
|
|
43
43
|
},
|
|
44
44
|
"optionalDependencies": {
|
|
45
|
-
"@mariozechner/clipboard-linux-x64-gnu": "0.3.
|
|
46
|
-
"@mariozechner/clipboard-linux-x64-musl": "0.3.6"
|
|
45
|
+
"@mariozechner/clipboard-linux-x64-gnu": "0.3.9"
|
|
47
46
|
}
|
|
48
47
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mariozechner/clipboard",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.9",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"napi": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"url": "https://github.com/badlogic/clipboard.git"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@napi-rs/cli": "
|
|
26
|
+
"@napi-rs/cli": "3.7.0",
|
|
27
27
|
"ava": "^6.0.1"
|
|
28
28
|
},
|
|
29
29
|
"ava": {
|
|
@@ -36,21 +36,21 @@
|
|
|
36
36
|
"artifacts": "napi artifacts",
|
|
37
37
|
"build": "napi build --platform --release",
|
|
38
38
|
"build:debug": "napi build --platform",
|
|
39
|
-
"prepublishOnly": "napi
|
|
39
|
+
"prepublishOnly": "napi pre-publish -t npm",
|
|
40
40
|
"test": "ava",
|
|
41
|
-
"universal": "napi
|
|
41
|
+
"universal": "napi universalize -o artifacts",
|
|
42
42
|
"version": "napi version"
|
|
43
43
|
},
|
|
44
44
|
"optionalDependencies": {
|
|
45
|
-
"@mariozechner/clipboard-darwin-arm64": "0.3.
|
|
46
|
-
"@mariozechner/clipboard-darwin-universal": "0.3.
|
|
47
|
-
"@mariozechner/clipboard-darwin-x64": "0.3.
|
|
48
|
-
"@mariozechner/clipboard-linux-arm64-gnu": "0.3.
|
|
49
|
-
"@mariozechner/clipboard-linux-arm64-musl": "0.3.
|
|
50
|
-
"@mariozechner/clipboard-linux-riscv64-gnu": "0.3.
|
|
51
|
-
"@mariozechner/clipboard-linux-x64-gnu": "0.3.
|
|
52
|
-
"@mariozechner/clipboard-linux-x64-musl": "0.3.
|
|
53
|
-
"@mariozechner/clipboard-win32-arm64-msvc": "0.3.
|
|
54
|
-
"@mariozechner/clipboard-win32-x64-msvc": "0.3.
|
|
45
|
+
"@mariozechner/clipboard-darwin-arm64": "0.3.9",
|
|
46
|
+
"@mariozechner/clipboard-darwin-universal": "0.3.9",
|
|
47
|
+
"@mariozechner/clipboard-darwin-x64": "0.3.9",
|
|
48
|
+
"@mariozechner/clipboard-linux-arm64-gnu": "0.3.9",
|
|
49
|
+
"@mariozechner/clipboard-linux-arm64-musl": "0.3.9",
|
|
50
|
+
"@mariozechner/clipboard-linux-riscv64-gnu": "0.3.9",
|
|
51
|
+
"@mariozechner/clipboard-linux-x64-gnu": "0.3.9",
|
|
52
|
+
"@mariozechner/clipboard-linux-x64-musl": "0.3.9",
|
|
53
|
+
"@mariozechner/clipboard-win32-arm64-msvc": "0.3.9",
|
|
54
|
+
"@mariozechner/clipboard-win32-x64-msvc": "0.3.9"
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -9,10 +9,9 @@ use clipboard_rs::{
|
|
|
9
9
|
};
|
|
10
10
|
use napi::{
|
|
11
11
|
bindgen_prelude::*,
|
|
12
|
-
threadsafe_function::{
|
|
13
|
-
JsFunction,
|
|
12
|
+
threadsafe_function::{ThreadsafeFunction, ThreadsafeFunctionCallMode},
|
|
14
13
|
};
|
|
15
|
-
use std::{thread, time::Duration};
|
|
14
|
+
use std::{sync::Arc, thread, time::Duration};
|
|
16
15
|
|
|
17
16
|
#[macro_use]
|
|
18
17
|
extern crate napi_derive;
|
|
@@ -162,13 +161,9 @@ pub fn watch() {
|
|
|
162
161
|
}
|
|
163
162
|
|
|
164
163
|
#[napi]
|
|
165
|
-
pub fn call_threadsafe_function(callback:
|
|
166
|
-
let tsfn: ThreadsafeFunction<u32, ErrorStrategy::CalleeHandled> = callback
|
|
167
|
-
.create_threadsafe_function(0, |ctx| {
|
|
168
|
-
ctx.env.create_uint32(ctx.value + 1).map(|v| vec![v])
|
|
169
|
-
})?;
|
|
164
|
+
pub fn call_threadsafe_function(callback: Arc<ThreadsafeFunction<u32, ()>>) -> Result<()> {
|
|
170
165
|
for n in 0..10 {
|
|
171
|
-
let tsfn =
|
|
166
|
+
let tsfn = Arc::clone(&callback);
|
|
172
167
|
thread::spawn(move || {
|
|
173
168
|
tsfn.call(Ok(n), ThreadsafeFunctionCallMode::Blocking);
|
|
174
169
|
});
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@entelligentsia/forgecli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "Forge SDLC ported onto @earendil-works/pi-coding-agent \u2014 production launcher with three bin aliases (forge/forgecli/4ge). Bundles a curated fork of pi-coding-agent vendored under earendil-works names.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Entelligentsia",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
]
|
|
50
50
|
},
|
|
51
51
|
"forge": {
|
|
52
|
-
"bundledVersion": "0.
|
|
52
|
+
"bundledVersion": "1.0.10",
|
|
53
53
|
"forgeRoot": "../forge/forge"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
@@ -71,20 +71,22 @@
|
|
|
71
71
|
"@earendil-works/pi-agent-core",
|
|
72
72
|
"@earendil-works/pi-ai",
|
|
73
73
|
"@earendil-works/pi-tui",
|
|
74
|
+
"@entelligentsia/forge-compress",
|
|
74
75
|
"js-yaml"
|
|
75
76
|
],
|
|
76
77
|
"dependencies": {
|
|
77
|
-
"@earendil-works/pi-agent-core": "file:./vendor-pi/earendil-works-pi-agent-core-0.
|
|
78
|
-
"@earendil-works/pi-ai": "file:./vendor-pi/earendil-works-pi-ai-0.
|
|
79
|
-
"@earendil-works/pi-coding-agent": "file:./vendor-pi/earendil-works-pi-coding-agent-0.
|
|
80
|
-
"@earendil-works/pi-tui": "file:./vendor-pi/earendil-works-pi-tui-0.
|
|
78
|
+
"@earendil-works/pi-agent-core": "file:./vendor-pi/earendil-works-pi-agent-core-0.78.0.tgz",
|
|
79
|
+
"@earendil-works/pi-ai": "file:./vendor-pi/earendil-works-pi-ai-0.78.0.tgz",
|
|
80
|
+
"@earendil-works/pi-coding-agent": "file:./vendor-pi/earendil-works-pi-coding-agent-0.78.0-forge.1.tgz",
|
|
81
|
+
"@earendil-works/pi-tui": "file:./vendor-pi/earendil-works-pi-tui-0.78.0.tgz",
|
|
81
82
|
"ajv": "^8.20.0",
|
|
82
83
|
"js-yaml": "^4.1.0",
|
|
84
|
+
"@entelligentsia/forge-compress": "file:../forge-compress",
|
|
83
85
|
"lunr": "2.3.9",
|
|
84
86
|
"typebox": "^1.1.24"
|
|
85
87
|
},
|
|
86
88
|
"peerDependencies": {
|
|
87
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
89
|
+
"@earendil-works/pi-coding-agent": "0.78.0"
|
|
88
90
|
},
|
|
89
91
|
"devDependencies": {
|
|
90
92
|
"@biomejs/biome": "^2.3.5",
|
|
@@ -97,12 +99,5 @@
|
|
|
97
99
|
},
|
|
98
100
|
"engines": {
|
|
99
101
|
"node": ">=20.6.0"
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
"@earendil-works/pi-coding-agent",
|
|
103
|
-
"@earendil-works/pi-agent-core",
|
|
104
|
-
"@earendil-works/pi-ai",
|
|
105
|
-
"@earendil-works/pi-tui",
|
|
106
|
-
"js-yaml"
|
|
107
|
-
]
|
|
108
|
-
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: calibrate
|
|
3
|
-
description: REMOVED in v1.0 — use /forge:health --fix instead
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /forge:calibrate — Removed
|
|
7
|
-
|
|
8
|
-
× `/forge:calibrate` was removed in v1.0. KB drift detection and repair is now handled by `/forge:health --fix` (implemented in T04).
|
|
9
|
-
|
|
10
|
-
Run `/forge:health` to check overall knowledge base status.
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: materialize
|
|
3
|
-
description: Use when you've run /forge:init --fast and want to fill in missing scaffolding — either for a specific workflow's closure or as a full warm-up. Fills missing or stubbed artifacts; does not change config mode. Unlike /forge:regenerate (which rebuilds regardless), materialize only fills what is missing or stubbed, leaving pristine user-modified files untouched.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /forge:materialize
|
|
7
|
-
|
|
8
|
-
Fills missing or stubbed Forge scaffolding without overwriting pristine files.
|
|
9
|
-
This is the on-demand complement to `/forge:init --fast`.
|
|
10
|
-
|
|
11
|
-
`materialize` is **mode-neutral** — it never writes `.forge/config.json`
|
|
12
|
-
`mode`. Promotion from fast → full is a separate explicit decision owned
|
|
13
|
-
by `/forge:config mode full`. After a `materialize --all`, it is normal
|
|
14
|
-
for `mode` to remain `fast` even though every artifact is now present.
|
|
15
|
-
|
|
16
|
-
## Locate the Forge plugin
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Read `.forge/config.json`. If it does not exist, stop and tell the user to run
|
|
23
|
-
`/forge:init` first.
|
|
24
|
-
|
|
25
|
-
## Arguments
|
|
26
|
-
|
|
27
|
-
$ARGUMENTS
|
|
28
|
-
|
|
29
|
-
Parse the argument:
|
|
30
|
-
|
|
31
|
-
```
|
|
32
|
-
/forge:materialize # full warm-up — all stubs + missing
|
|
33
|
-
/forge:materialize --all # same as no args
|
|
34
|
-
/forge:materialize workflows plan_task # just this workflow's closure
|
|
35
|
-
/forge:materialize workflows:plan_task # colon form
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## Full warm-up (`/forge:materialize` or `--all`)
|
|
41
|
-
|
|
42
|
-
Open with the forge badge + status line:
|
|
43
|
-
|
|
44
|
-
```sh
|
|
45
|
-
node "$FORGE_ROOT/tools/banners.cjs" --badge forge
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Emit: `〇 forge:materialize — full warm-up…`
|
|
49
|
-
|
|
50
|
-
Then announce the fast-mode capability state — silent on full installs:
|
|
51
|
-
|
|
52
|
-
```sh
|
|
53
|
-
node "$FORGE_ROOT/tools/ensure-ready.cjs" --announce --all
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
`banners.cjs` strips ANSI in `NO_COLOR` / non-tty / `--plain` contexts.
|
|
57
|
-
|
|
58
|
-
Follow `$FORGE_ROOT/init/generation/lazy-materialize.md` for each stub or missing
|
|
59
|
-
workflow in `.forge/workflows/`. Work from a single collected list:
|
|
60
|
-
|
|
61
|
-
1. Read `$FORGE_ROOT/schemas/structure-manifest.json` for the full workflow list.
|
|
62
|
-
2. For each workflow id in `namespaces.workflows.files`:
|
|
63
|
-
- Check if `.forge/workflows/{id}.md` is a stub (starts with `<!-- FORGE FAST-MODE STUB`)
|
|
64
|
-
or is missing.
|
|
65
|
-
- Collect all stubs/missing into one list.
|
|
66
|
-
3. Compute the union closure across all stubs/missing workflows.
|
|
67
|
-
4. Fan-out materialisation following the lazy-materialize rulebook steps 5–10
|
|
68
|
-
for the union closure (one pass, not per-workflow).
|
|
69
|
-
5. Rebuild the persona pack so `meta-orchestrate` and `meta-fix-bug` use
|
|
70
|
-
a fresh reference index (consumed when `FORGE_PROMPT_MODE=reference`):
|
|
71
|
-
```sh
|
|
72
|
-
node "$FORGE_ROOT/tools/build-persona-pack.cjs" \
|
|
73
|
-
--out .forge/cache/persona-pack.json
|
|
74
|
-
```
|
|
75
|
-
On exit 1, surface the stderr message (it includes the offending file
|
|
76
|
-
path) and continue — the pack is refreshable later via `/forge:regenerate`.
|
|
77
|
-
6. Rebuild the architecture context pack:
|
|
78
|
-
```sh
|
|
79
|
-
ENGINEERING=$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)
|
|
80
|
-
node "$FORGE_ROOT/tools/build-context-pack.cjs" \
|
|
81
|
-
--arch-dir "$ENGINEERING/architecture" \
|
|
82
|
-
--out-md .forge/cache/context-pack.md \
|
|
83
|
-
--out-json .forge/cache/context-pack.json
|
|
84
|
-
```
|
|
85
|
-
On exit 1 (architecture directory not yet present), emit a warning and
|
|
86
|
-
continue — the pack can be built later via `/forge:regenerate`.
|
|
87
|
-
7. Emit: `〇 forge:materialize complete — gaps filled (mode unchanged)`
|
|
88
|
-
8. If `.forge/config.json` `mode` is still `"fast"`, append the promotion hint:
|
|
89
|
-
```
|
|
90
|
-
〇 To declare the project fully generated: /forge:config mode full
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Single-workflow (`/forge:materialize workflows <id>`)
|
|
96
|
-
|
|
97
|
-
Open with the forge badge + status line:
|
|
98
|
-
|
|
99
|
-
```sh
|
|
100
|
-
node "$FORGE_ROOT/tools/banners.cjs" --badge forge
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Emit: `〇 forge:materialize — materialising closure for {id}…`
|
|
104
|
-
|
|
105
|
-
Follow `$FORGE_ROOT/init/generation/lazy-materialize.md` with `workflow_id={id}`.
|
|
106
|
-
Pass the full argument (caller intent) so the rulebook can re-read and execute
|
|
107
|
-
the real workflow after materialisation.
|
|
108
|
-
|
|
109
|
-
Do NOT flip config mode for any materialize invocation. Mode is owned by
|
|
110
|
-
`/forge:config`.
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## On error
|
|
115
|
-
|
|
116
|
-
If any generation step fails unexpectedly:
|
|
117
|
-
|
|
118
|
-
> "This looks like a Forge bug. Would you like to file a report? Run
|
|
119
|
-
> `/forge:report-bug` — I'll pre-fill the report from this conversation."
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: migrate
|
|
3
|
-
description: REMOVED in v1.0 — use /forge:init --migrate instead
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /forge:migrate — Removed
|
|
7
|
-
|
|
8
|
-
× `/forge:migrate` was removed in v1.0. Store migration is now a flag on `/forge:init`:
|
|
9
|
-
|
|
10
|
-
- `/forge:init --migrate` — interviews you to map existing store values to Forge format (equivalent to the old `forge:migrate`)
|
|
11
|
-
- `/forge:init --migrate --structural` — runs structural migration for pre-v0.40 stores
|
|
12
|
-
- `/forge:init --migrate --dry-run` — preview changes without applying them
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: update-tools
|
|
3
|
-
description: REMOVED in v1.0 — use /forge:update instead
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /forge:update-tools — Removed
|
|
7
|
-
|
|
8
|
-
× `/forge:update-tools` was removed in v1.0. Schema refresh now happens automatically as part of `/forge:update`.
|
|
9
|
-
|
|
10
|
-
Run `/forge:update` to refresh schemas along with other project artifacts.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# Meta-Template: Sprint Retrospective
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
|
|
5
|
-
Defines the structure of the sprint retrospective document — metrics,
|
|
6
|
-
learnings, and improvements.
|
|
7
|
-
|
|
8
|
-
## Sections
|
|
9
|
-
|
|
10
|
-
### Required
|
|
11
|
-
- **Sprint Summary** — tasks completed, failed, carried over
|
|
12
|
-
- **Metrics** — plan iterations, code review iterations, time per task
|
|
13
|
-
- **What Went Well** — patterns that worked
|
|
14
|
-
- **What to Improve** — friction points, recurring issues
|
|
15
|
-
- **Knowledge Base Updates** — what was confirmed, added, or removed
|
|
16
|
-
- **Stack Checklist Changes** — items added or pruned
|
|
17
|
-
|
|
18
|
-
### Optional
|
|
19
|
-
- **Workflow Improvements** — proposed edits to workflow files
|
|
20
|
-
- **Bug Pattern Analysis** — recurring root cause categories
|
|
21
|
-
- **Merge Conflicts** — if parallel mode, what conflicted and why
|
|
22
|
-
- **Recommendations for Next Sprint** — scope, focus, mode
|
|
23
|
-
|
|
24
|
-
## Generation Instructions
|
|
25
|
-
- Reference the project's sprint artifact paths for data gathering
|
|
26
|
-
- Reference the project's domain docs and stack checklist
|
|
27
|
-
- Include the project's workflow file paths for proposed edits
|
|
28
|
-
- Reference the project's specific tech debt areas
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
# Sprint Plan — Architect Persona Prompt
|
|
2
|
-
|
|
3
|
-
You are acting as the **Forge Architect** (🗻).
|
|
4
|
-
|
|
5
|
-
Your role: decompose a sprint's requirements into a concrete, dependency-ordered task list. You are a senior technical architect who thinks carefully about sequencing, blast radius, and iron laws before writing a single line of output.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Your Task
|
|
10
|
-
|
|
11
|
-
Read the sprint requirements provided and produce a **JSON array** of task objects. Each task covers one coherent, implementable unit of work. Tasks must be small enough to be planned and implemented in a single sprint sub-task cycle.
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Output Format
|
|
16
|
-
|
|
17
|
-
Emit **only** a JSON array — no preamble, no markdown fences, no commentary outside the JSON. The schema:
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
[
|
|
21
|
-
{
|
|
22
|
-
"taskId": "SPRINT_ID-T01",
|
|
23
|
-
"title": "Short imperative title (≤80 chars)",
|
|
24
|
-
"estimate": "S",
|
|
25
|
-
"dependencies": [],
|
|
26
|
-
"pipeline": "plan,implement,review,validate,approve,commit",
|
|
27
|
-
"acceptanceCriteria": [
|
|
28
|
-
"Specific, verifiable criterion 1",
|
|
29
|
-
"Specific, verifiable criterion 2"
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Field rules
|
|
36
|
-
|
|
37
|
-
| Field | Type | Rule |
|
|
38
|
-
|---|---|---|
|
|
39
|
-
| `taskId` | string | `{SPRINT_ID}-T{NN}` — sequential integers starting at 01. Use the sprint ID from the requirements. |
|
|
40
|
-
| `title` | string | Imperative phrase, ≤80 chars. No trailing punctuation. |
|
|
41
|
-
| `estimate` | enum | One of: `S` (≤4h), `M` (≤1d), `L` (≤2d), `XL` (≤5d). |
|
|
42
|
-
| `dependencies` | string[] | Task IDs of tasks this task depends on. Empty array if none. No circular deps. |
|
|
43
|
-
| `pipeline` | string | Default: `"plan,implement,review,validate,approve,commit"`. Adjust only for trivial chores. |
|
|
44
|
-
| `acceptanceCriteria` | string[] | 2–8 specific, verifiable criteria. Each criterion must be independently checkable. No vague phrases like "works correctly". |
|
|
45
|
-
|
|
46
|
-
### Dependency rules
|
|
47
|
-
|
|
48
|
-
- Dependencies form a DAG (directed acyclic graph). Circular dependencies are invalid.
|
|
49
|
-
- A release/packaging task always depends on all feature tasks.
|
|
50
|
-
- Tasks that share no code boundary may be declared parallel (no mutual dep).
|
|
51
|
-
- Order tasks so lower-numbered tasks are prerequisites for higher-numbered tasks where possible.
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Quality Checklist
|
|
56
|
-
|
|
57
|
-
Before emitting output, verify:
|
|
58
|
-
|
|
59
|
-
- [ ] Every `taskId` is unique and follows the `{SPRINT_ID}-T{NN}` pattern
|
|
60
|
-
- [ ] No circular dependencies
|
|
61
|
-
- [ ] Each task has at least 2 acceptance criteria
|
|
62
|
-
- [ ] Estimates are realistic (L tasks should not attempt to cover more than 2 full days of work)
|
|
63
|
-
- [ ] A release or packaging task (if applicable) is listed last and depends on all feature tasks
|
|
64
|
-
- [ ] The JSON is valid — parseable without error
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Sprint Requirements
|
|
69
|
-
|
|
70
|
-
{SPRINT_REQUIREMENTS}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"title": "TaskList",
|
|
4
|
-
"description": "JSON Schema for the LLM-generated task list produced by forge:sprint-plan.",
|
|
5
|
-
"type": "array",
|
|
6
|
-
"minItems": 1,
|
|
7
|
-
"items": {
|
|
8
|
-
"type": "object",
|
|
9
|
-
"required": ["taskId", "title", "estimate", "dependencies", "pipeline", "acceptanceCriteria"],
|
|
10
|
-
"additionalProperties": false,
|
|
11
|
-
"properties": {
|
|
12
|
-
"taskId": {
|
|
13
|
-
"type": "string",
|
|
14
|
-
"pattern": "^[A-Z][A-Z0-9_-]+-T[0-9]+$",
|
|
15
|
-
"description": "Task identifier in the form {SPRINT_ID}-T{NN}, e.g. FORGE-S20-T01"
|
|
16
|
-
},
|
|
17
|
-
"title": {
|
|
18
|
-
"type": "string",
|
|
19
|
-
"minLength": 1,
|
|
20
|
-
"maxLength": 80,
|
|
21
|
-
"description": "Short imperative title for the task"
|
|
22
|
-
},
|
|
23
|
-
"estimate": {
|
|
24
|
-
"type": "string",
|
|
25
|
-
"enum": ["S", "M", "L", "XL"],
|
|
26
|
-
"description": "Size estimate: S (≤4h), M (≤1d), L (≤2d), XL (≤5d)"
|
|
27
|
-
},
|
|
28
|
-
"dependencies": {
|
|
29
|
-
"type": "array",
|
|
30
|
-
"items": {
|
|
31
|
-
"type": "string",
|
|
32
|
-
"pattern": "^[A-Z][A-Z0-9_-]+-T[0-9]+$"
|
|
33
|
-
},
|
|
34
|
-
"description": "Task IDs this task depends on. Empty array if no dependencies."
|
|
35
|
-
},
|
|
36
|
-
"pipeline": {
|
|
37
|
-
"type": "string",
|
|
38
|
-
"minLength": 1,
|
|
39
|
-
"description": "Comma-separated pipeline phase list, e.g. plan,implement,review,validate,approve,commit"
|
|
40
|
-
},
|
|
41
|
-
"acceptanceCriteria": {
|
|
42
|
-
"type": "array",
|
|
43
|
-
"minItems": 2,
|
|
44
|
-
"maxItems": 12,
|
|
45
|
-
"items": {
|
|
46
|
-
"type": "string",
|
|
47
|
-
"minLength": 10
|
|
48
|
-
},
|
|
49
|
-
"description": "Specific, verifiable acceptance criteria (2–12 items)"
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execution-env.d.ts","sourceRoot":"","sources":["../../src/harness/execution-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,uBAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC","sourcesContent":["export { NodeExecutionEnv } from \"./env/nodejs.js\";\nexport type { ExecutionEnv, ExecutionEnvExecOptions, FileErrorCode, FileInfo, FileKind } from \"./types.js\";\nexport { FileError } from \"./types.js\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execution-env.js","sourceRoot":"","sources":["../../src/harness/execution-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC","sourcesContent":["export { NodeExecutionEnv } from \"./env/nodejs.js\";\nexport type { ExecutionEnv, ExecutionEnvExecOptions, FileErrorCode, FileInfo, FileKind } from \"./types.js\";\nexport { FileError } from \"./types.js\";\n"]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { JsonlSessionCreateOptions, JsonlSessionListOptions, JsonlSessionMetadata, JsonlSessionRepoApi, Session } from "../../types.js";
|
|
2
|
-
export declare class JsonlSessionRepo implements JsonlSessionRepoApi {
|
|
3
|
-
private sessionsRoot;
|
|
4
|
-
constructor(options: {
|
|
5
|
-
sessionsRoot: string;
|
|
6
|
-
});
|
|
7
|
-
private getSessionDir;
|
|
8
|
-
private createSessionFilePath;
|
|
9
|
-
create(options: JsonlSessionCreateOptions): Promise<Session<JsonlSessionMetadata>>;
|
|
10
|
-
open(metadata: JsonlSessionMetadata): Promise<Session<JsonlSessionMetadata>>;
|
|
11
|
-
list(options?: JsonlSessionListOptions): Promise<JsonlSessionMetadata[]>;
|
|
12
|
-
delete(metadata: JsonlSessionMetadata): Promise<void>;
|
|
13
|
-
fork(sourceMetadata: JsonlSessionMetadata, options: JsonlSessionCreateOptions & {
|
|
14
|
-
entryId?: string;
|
|
15
|
-
position?: "before" | "at";
|
|
16
|
-
id?: string;
|
|
17
|
-
}): Promise<Session<JsonlSessionMetadata>>;
|
|
18
|
-
private listSessionDirs;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=jsonl.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../../../src/harness/session/repo/jsonl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,EACP,MAAM,gBAAgB,CAAC;AAiBxB,qBAAa,gBAAiB,YAAW,mBAAmB;IAC3D,OAAO,CAAC,YAAY,CAAS;IAE7B,YAAY,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,EAE5C;IAED,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,qBAAqB;IAIvB,MAAM,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAWvF;IAEK,IAAI,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAMjF;IAEK,IAAI,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAgBjF;IAEK,MAAM,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;IAEK,IAAI,CACT,cAAc,EAAE,oBAAoB,EACpC,OAAO,EAAE,yBAAyB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAChG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAcxC;YAEa,eAAe;CAK7B","sourcesContent":["import { constants } from \"node:fs\";\nimport { access, mkdir, readdir, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport type {\n\tJsonlSessionCreateOptions,\n\tJsonlSessionListOptions,\n\tJsonlSessionMetadata,\n\tJsonlSessionRepoApi,\n\tSession,\n} from \"../../types.js\";\nimport { JsonlSessionStorage, loadJsonlSessionMetadata } from \"../storage/jsonl.js\";\nimport { createSessionId, createTimestamp, getEntriesToFork, toSession } from \"./shared.js\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction encodeCwd(cwd: string): string {\n\treturn `--${cwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n}\n\nexport class JsonlSessionRepo implements JsonlSessionRepoApi {\n\tprivate sessionsRoot: string;\n\n\tconstructor(options: { sessionsRoot: string }) {\n\t\tthis.sessionsRoot = resolve(options.sessionsRoot);\n\t}\n\n\tprivate getSessionDir(cwd: string): string {\n\t\treturn join(this.sessionsRoot, encodeCwd(cwd));\n\t}\n\n\tprivate createSessionFilePath(cwd: string, sessionId: string, timestamp: string): string {\n\t\treturn join(this.getSessionDir(cwd), `${timestamp.replace(/[:.]/g, \"-\")}_${sessionId}.jsonl`);\n\t}\n\n\tasync create(options: JsonlSessionCreateOptions): Promise<Session<JsonlSessionMetadata>> {\n\t\tawait mkdir(this.sessionsRoot, { recursive: true });\n\t\tconst id = options.id ?? createSessionId();\n\t\tconst createdAt = createTimestamp();\n\t\tconst filePath = this.createSessionFilePath(options.cwd, id, createdAt);\n\t\tconst storage = await JsonlSessionStorage.create(filePath, {\n\t\t\tcwd: options.cwd,\n\t\t\tsessionId: id,\n\t\t\tparentSessionPath: options.parentSessionPath,\n\t\t});\n\t\treturn toSession(storage);\n\t}\n\n\tasync open(metadata: JsonlSessionMetadata): Promise<Session<JsonlSessionMetadata>> {\n\t\tif (!(await exists(metadata.path))) {\n\t\t\tthrow new Error(`Session not found: ${metadata.path}`);\n\t\t}\n\t\tconst storage = await JsonlSessionStorage.open(metadata.path);\n\t\treturn toSession(storage);\n\t}\n\n\tasync list(options: JsonlSessionListOptions = {}): Promise<JsonlSessionMetadata[]> {\n\t\tconst dirs = options.cwd ? [this.getSessionDir(options.cwd)] : await this.listSessionDirs();\n\t\tconst sessions: JsonlSessionMetadata[] = [];\n\t\tfor (const dir of dirs) {\n\t\t\tif (!(await exists(dir))) continue;\n\t\t\tconst files = (await readdir(dir)).filter((file) => file.endsWith(\".jsonl\")).map((file) => join(dir, file));\n\t\t\tfor (const filePath of files) {\n\t\t\t\ttry {\n\t\t\t\t\tsessions.push(await loadJsonlSessionMetadata(filePath));\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore invalid session files when listing a directory.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsessions.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\t\treturn sessions;\n\t}\n\n\tasync delete(metadata: JsonlSessionMetadata): Promise<void> {\n\t\tawait rm(metadata.path, { force: true });\n\t}\n\n\tasync fork(\n\t\tsourceMetadata: JsonlSessionMetadata,\n\t\toptions: JsonlSessionCreateOptions & { entryId?: string; position?: \"before\" | \"at\"; id?: string },\n\t): Promise<Session<JsonlSessionMetadata>> {\n\t\tconst source = await this.open(sourceMetadata);\n\t\tconst forkedEntries = await getEntriesToFork(source.getStorage(), options);\n\t\tconst id = options.id ?? createSessionId();\n\t\tconst createdAt = createTimestamp();\n\t\tconst storage = await JsonlSessionStorage.create(this.createSessionFilePath(options.cwd, id, createdAt), {\n\t\t\tcwd: options.cwd,\n\t\t\tsessionId: id,\n\t\t\tparentSessionPath: options.parentSessionPath ?? sourceMetadata.path,\n\t\t});\n\t\tfor (const entry of forkedEntries) {\n\t\t\tawait storage.appendEntry(entry);\n\t\t}\n\t\treturn toSession(storage);\n\t}\n\n\tprivate async listSessionDirs(): Promise<string[]> {\n\t\tif (!(await exists(this.sessionsRoot))) return [];\n\t\tconst entries = await readdir(this.sessionsRoot, { withFileTypes: true });\n\t\treturn entries.filter((entry) => entry.isDirectory()).map((entry) => join(this.sessionsRoot, entry.name));\n\t}\n}\n"]}
|