pi-agent-flow 1.8.40 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -37
- package/agents/audit.md +18 -22
- package/agents/build.md +20 -22
- package/agents/craft.md +20 -27
- package/agents/debug.md +21 -28
- package/agents/ideas.md +18 -101
- package/agents/scout.md +15 -19
- package/dist/batch/batch-bash.d.ts +2 -2
- package/dist/batch/batch-bash.d.ts.map +1 -1
- package/dist/batch/batch-bash.js +3 -3
- package/dist/batch/batch-bash.js.map +1 -1
- package/dist/batch/constants.d.ts +19 -5
- package/dist/batch/constants.d.ts.map +1 -1
- package/dist/batch/constants.js +4 -3
- package/dist/batch/constants.js.map +1 -1
- package/dist/batch/execute.d.ts +0 -1
- package/dist/batch/execute.d.ts.map +1 -1
- package/dist/batch/execute.js +97 -6
- package/dist/batch/execute.js.map +1 -1
- package/dist/batch/fuzzy-edit.d.ts +0 -6
- package/dist/batch/fuzzy-edit.d.ts.map +1 -1
- package/dist/batch/fuzzy-edit.js +1 -1
- package/dist/batch/fuzzy-edit.js.map +1 -1
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js +87 -16
- package/dist/batch/index.js.map +1 -1
- package/dist/batch/render.d.ts +0 -1
- package/dist/batch/render.d.ts.map +1 -1
- package/dist/batch/render.js +7 -101
- package/dist/batch/render.js.map +1 -1
- package/dist/batch/summary.d.ts +5 -0
- package/dist/batch/summary.d.ts.map +1 -0
- package/dist/batch/summary.js +101 -0
- package/dist/batch/summary.js.map +1 -0
- package/dist/{config.d.ts → config/config.d.ts} +34 -2
- package/dist/config/config.d.ts.map +1 -0
- package/dist/{config.js → config/config.js} +157 -9
- package/dist/config/config.js.map +1 -0
- package/dist/config/log.d.ts +27 -0
- package/dist/config/log.d.ts.map +1 -0
- package/dist/config/log.js +104 -0
- package/dist/config/log.js.map +1 -0
- package/dist/{settings-resolver.d.ts → config/settings-resolver.d.ts} +9 -2
- package/dist/config/settings-resolver.d.ts.map +1 -0
- package/dist/config/settings-resolver.js +275 -0
- package/dist/config/settings-resolver.js.map +1 -0
- package/dist/core/agents.d.ts.map +1 -0
- package/dist/{agents.js → core/agents.js} +11 -10
- package/dist/core/agents.js.map +1 -0
- package/dist/core/delegation.d.ts +24 -0
- package/dist/core/delegation.d.ts.map +1 -0
- package/dist/core/delegation.js +55 -0
- package/dist/core/delegation.js.map +1 -0
- package/dist/core/depth.d.ts.map +1 -0
- package/dist/{depth.js → core/depth.js} +9 -8
- package/dist/core/depth.js.map +1 -0
- package/dist/{executor.d.ts → core/executor.d.ts} +11 -3
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/{executor.js → core/executor.js} +49 -14
- package/dist/core/executor.js.map +1 -0
- package/dist/{flow.d.ts → core/flow.d.ts} +4 -1
- package/dist/core/flow.d.ts.map +1 -0
- package/dist/{flow.js → core/flow.js} +110 -45
- package/dist/core/flow.js.map +1 -0
- package/dist/{session-mode.d.ts → core/session-mode.d.ts} +2 -1
- package/dist/core/session-mode.d.ts.map +1 -0
- package/dist/{session-mode.js → core/session-mode.js} +1 -1
- package/dist/core/session-mode.js.map +1 -0
- package/dist/core/session-registry.d.ts +16 -0
- package/dist/core/session-registry.d.ts.map +1 -0
- package/dist/core/session-registry.js +30 -0
- package/dist/core/session-registry.js.map +1 -0
- package/dist/core/transitions.d.ts.map +1 -0
- package/dist/{transitions.js → core/transitions.js} +1 -1
- package/dist/core/transitions.js.map +1 -0
- package/dist/flow/command.d.ts +8 -0
- package/dist/flow/command.d.ts.map +1 -0
- package/dist/flow/command.js +189 -0
- package/dist/flow/command.js.map +1 -0
- package/dist/flow/continuation.d.ts +16 -0
- package/dist/flow/continuation.d.ts.map +1 -0
- package/dist/flow/continuation.js +151 -0
- package/dist/flow/continuation.js.map +1 -0
- package/dist/flow/index.d.ts +15 -0
- package/dist/flow/index.d.ts.map +1 -0
- package/dist/flow/index.js +22 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/flow/settings-command.d.ts +51 -0
- package/dist/flow/settings-command.d.ts.map +1 -0
- package/dist/flow/settings-command.js +851 -0
- package/dist/flow/settings-command.js.map +1 -0
- package/dist/flow/store.d.ts +26 -0
- package/dist/flow/store.d.ts.map +1 -0
- package/dist/flow/store.js +158 -0
- package/dist/flow/store.js.map +1 -0
- package/dist/flow/template-strings.d.ts +8 -0
- package/dist/flow/template-strings.d.ts.map +1 -0
- package/dist/flow/template-strings.js +39 -0
- package/dist/flow/template-strings.js.map +1 -0
- package/dist/flow/types.d.ts +55 -0
- package/dist/flow/types.d.ts.map +1 -0
- package/dist/flow/types.js +5 -0
- package/dist/flow/types.js.map +1 -0
- package/dist/flow/warp-command.d.ts +9 -0
- package/dist/flow/warp-command.d.ts.map +1 -0
- package/dist/flow/warp-command.js +405 -0
- package/dist/flow/warp-command.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +103 -29
- package/dist/index.js.map +1 -1
- package/dist/{notify-state.d.ts → notify/notify-state.d.ts} +2 -1
- package/dist/notify/notify-state.d.ts.map +1 -0
- package/dist/notify/notify-state.js.map +1 -0
- package/dist/notify/notify.d.ts.map +1 -0
- package/dist/{notify.js → notify/notify.js} +3 -2
- package/dist/notify/notify.js.map +1 -0
- package/dist/{cli-args.d.ts → snapshot/cli-args.d.ts} +3 -2
- package/dist/snapshot/cli-args.d.ts.map +1 -0
- package/dist/{cli-args.js → snapshot/cli-args.js} +1 -1
- package/dist/snapshot/cli-args.js.map +1 -0
- package/dist/snapshot/index.d.ts +2 -0
- package/dist/snapshot/index.d.ts.map +1 -0
- package/dist/snapshot/index.js +2 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/{reasoning-strip.d.ts → snapshot/reasoning-strip.d.ts} +0 -4
- package/dist/snapshot/reasoning-strip.d.ts.map +1 -0
- package/dist/{reasoning-strip.js → snapshot/reasoning-strip.js} +2 -2
- package/dist/snapshot/reasoning-strip.js.map +1 -0
- package/dist/snapshot/runner-events.d.ts.map +1 -0
- package/dist/{runner-events.js → snapshot/runner-events.js} +1 -1
- package/dist/snapshot/runner-events.js.map +1 -0
- package/dist/{snapshot.d.ts → snapshot/snapshot.d.ts} +5 -2
- package/dist/snapshot/snapshot.d.ts.map +1 -0
- package/dist/{snapshot.js → snapshot/snapshot.js} +166 -35
- package/dist/snapshot/snapshot.js.map +1 -0
- package/dist/{structured-output.d.ts → snapshot/structured-output.d.ts} +1 -1
- package/dist/snapshot/structured-output.d.ts.map +1 -0
- package/dist/snapshot/structured-output.js.map +1 -0
- package/dist/{flow-prompt.d.ts → steering/flow-prompt.d.ts} +2 -2
- package/dist/steering/flow-prompt.d.ts.map +1 -0
- package/dist/{flow-prompt.js → steering/flow-prompt.js} +1 -1
- package/dist/steering/flow-prompt.js.map +1 -0
- package/dist/{sliding-prompt.d.ts → steering/sliding-prompt.d.ts} +8 -7
- package/dist/steering/sliding-prompt.d.ts.map +1 -0
- package/dist/{sliding-prompt.js → steering/sliding-prompt.js} +15 -64
- package/dist/steering/sliding-prompt.js.map +1 -0
- package/dist/{tool-utils.d.ts → steering/tool-utils.d.ts} +1 -0
- package/dist/steering/tool-utils.d.ts.map +1 -0
- package/dist/{tool-utils.js → steering/tool-utils.js} +10 -3
- package/dist/steering/tool-utils.js.map +1 -0
- package/dist/{ask-user.d.ts → tools/ask-user.d.ts} +3 -15
- package/dist/tools/ask-user.d.ts.map +1 -0
- package/dist/tools/ask-user.js +778 -0
- package/dist/tools/ask-user.js.map +1 -0
- package/dist/{timed-bash.d.ts → tools/timed-bash.d.ts} +2 -7
- package/dist/tools/timed-bash.d.ts.map +1 -0
- package/dist/{timed-bash.js → tools/timed-bash.js} +2 -2
- package/dist/tools/timed-bash.js.map +1 -0
- package/dist/{web-tool.d.ts → tools/web-tool.d.ts} +1 -1
- package/dist/tools/web-tool.d.ts.map +1 -0
- package/dist/{web-tool.js → tools/web-tool.js} +8 -7
- package/dist/tools/web-tool.js.map +1 -0
- package/dist/tui/flow-colors.d.ts +55 -0
- package/dist/tui/flow-colors.d.ts.map +1 -0
- package/dist/tui/flow-colors.js +22 -0
- package/dist/tui/flow-colors.js.map +1 -0
- package/dist/{render-utils.d.ts → tui/render-utils.d.ts} +1 -1
- package/dist/tui/render-utils.d.ts.map +1 -0
- package/dist/{render-utils.js → tui/render-utils.js} +3 -3
- package/dist/tui/render-utils.js.map +1 -0
- package/dist/tui/render.d.ts +21 -0
- package/dist/tui/render.d.ts.map +1 -0
- package/dist/tui/render.js +813 -0
- package/dist/tui/render.js.map +1 -0
- package/dist/tui/scramble/algorithm.d.ts +7 -0
- package/dist/tui/scramble/algorithm.d.ts.map +1 -0
- package/dist/tui/scramble/algorithm.js +227 -0
- package/dist/tui/scramble/algorithm.js.map +1 -0
- package/dist/tui/scramble/constants.d.ts +99 -0
- package/dist/tui/scramble/constants.d.ts.map +1 -0
- package/dist/tui/scramble/constants.js +101 -0
- package/dist/tui/scramble/constants.js.map +1 -0
- package/dist/tui/scramble/index.d.ts +6 -0
- package/dist/tui/scramble/index.d.ts.map +1 -0
- package/dist/tui/scramble/index.js +6 -0
- package/dist/tui/scramble/index.js.map +1 -0
- package/dist/tui/scramble/manager.d.ts +48 -0
- package/dist/tui/scramble/manager.d.ts.map +1 -0
- package/dist/tui/scramble/manager.js +959 -0
- package/dist/tui/scramble/manager.js.map +1 -0
- package/dist/tui/scramble/utils.d.ts +18 -0
- package/dist/tui/scramble/utils.d.ts.map +1 -0
- package/dist/tui/scramble/utils.js +145 -0
- package/dist/tui/scramble/utils.js.map +1 -0
- package/dist/tui/single-select-layout.d.ts +17 -0
- package/dist/tui/single-select-layout.d.ts.map +1 -0
- package/dist/{single-select-layout.js → tui/single-select-layout.js} +8 -25
- package/dist/tui/single-select-layout.js.map +1 -0
- package/dist/types/flow.d.ts +110 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/{types.js → types/flow.js} +3 -54
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/output.d.ts +104 -0
- package/dist/types/output.d.ts.map +1 -0
- package/dist/types/output.js +5 -0
- package/dist/types/output.js.map +1 -0
- package/dist/types/ui.d.ts +24 -0
- package/dist/types/ui.d.ts.map +1 -0
- package/dist/types/ui.js +55 -0
- package/dist/types/ui.js.map +1 -0
- package/package.json +1 -1
- package/dist/agents.d.ts.map +0 -1
- package/dist/agents.js.map +0 -1
- package/dist/ask-user.d.ts.map +0 -1
- package/dist/ask-user.js +0 -1405
- package/dist/ask-user.js.map +0 -1
- package/dist/batch.d.ts +0 -12
- package/dist/batch.d.ts.map +0 -1
- package/dist/batch.js +0 -11
- package/dist/batch.js.map +0 -1
- package/dist/cli-args.d.ts.map +0 -1
- package/dist/cli-args.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/depth.d.ts.map +0 -1
- package/dist/depth.js.map +0 -1
- package/dist/executor.d.ts.map +0 -1
- package/dist/executor.js.map +0 -1
- package/dist/flow-prompt.d.ts.map +0 -1
- package/dist/flow-prompt.js.map +0 -1
- package/dist/flow.d.ts.map +0 -1
- package/dist/flow.js.map +0 -1
- package/dist/notify-state.d.ts.map +0 -1
- package/dist/notify-state.js.map +0 -1
- package/dist/notify.d.ts.map +0 -1
- package/dist/notify.js.map +0 -1
- package/dist/reasoning-strip.d.ts.map +0 -1
- package/dist/reasoning-strip.js.map +0 -1
- package/dist/render-utils.d.ts.map +0 -1
- package/dist/render-utils.js.map +0 -1
- package/dist/render.d.ts +0 -24
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js +0 -592
- package/dist/render.js.map +0 -1
- package/dist/runner-events.d.ts.map +0 -1
- package/dist/runner-events.js.map +0 -1
- package/dist/scramble.d.ts +0 -183
- package/dist/scramble.d.ts.map +0 -1
- package/dist/scramble.js +0 -2478
- package/dist/scramble.js.map +0 -1
- package/dist/session-mode.d.ts.map +0 -1
- package/dist/session-mode.js.map +0 -1
- package/dist/settings-resolver.d.ts.map +0 -1
- package/dist/settings-resolver.js +0 -148
- package/dist/settings-resolver.js.map +0 -1
- package/dist/single-select-layout.d.ts +0 -20
- package/dist/single-select-layout.d.ts.map +0 -1
- package/dist/single-select-layout.js.map +0 -1
- package/dist/sliding-prompt.d.ts.map +0 -1
- package/dist/sliding-prompt.js.map +0 -1
- package/dist/snapshot.d.ts.map +0 -1
- package/dist/snapshot.js.map +0 -1
- package/dist/spec-mode.d.ts +0 -13
- package/dist/spec-mode.d.ts.map +0 -1
- package/dist/spec-mode.js +0 -90
- package/dist/spec-mode.js.map +0 -1
- package/dist/structured-output.d.ts.map +0 -1
- package/dist/structured-output.js.map +0 -1
- package/dist/timed-bash.d.ts.map +0 -1
- package/dist/timed-bash.js.map +0 -1
- package/dist/tool-utils.d.ts.map +0 -1
- package/dist/tool-utils.js.map +0 -1
- package/dist/transitions.d.ts.map +0 -1
- package/dist/transitions.js.map +0 -1
- package/dist/types.d.ts +0 -224
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/web-tool.d.ts.map +0 -1
- package/dist/web-tool.js.map +0 -1
- /package/dist/{agents.d.ts → core/agents.d.ts} +0 -0
- /package/dist/{depth.d.ts → core/depth.d.ts} +0 -0
- /package/dist/{transitions.d.ts → core/transitions.d.ts} +0 -0
- /package/dist/{notify-state.js → notify/notify-state.js} +0 -0
- /package/dist/{notify.d.ts → notify/notify.d.ts} +0 -0
- /package/dist/{runner-events.d.ts → snapshot/runner-events.d.ts} +0 -0
- /package/dist/{structured-output.js → snapshot/structured-output.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../src/core/session-registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,mBAAmB;AAC/D,IAAI,QAA4B,CAAC;AAEjC,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,SAAiB;IACrD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC7B,QAAQ,GAAG,GAAG,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACrB,QAAQ,GAAG,SAAS,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transitions.d.ts","sourceRoot":"","sources":["../../src/core/transitions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,cAAc;IAC9B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;CACf;AAMD,eAAO,MAAM,mBAAmB,EAAE,cAAc,EAW/C,CAAC;AAMF;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,EACnH,WAAW,GAAE,cAAc,EAAwB,GACjD,MAAM,EAAE,CAuBV"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* follow-up flow given a source flow's outcome. The matrix is used by
|
|
6
6
|
* getTransitionAdvice() to generate advisory strings.
|
|
7
7
|
*/
|
|
8
|
-
import { isFlowSuccess } from "
|
|
8
|
+
import { isFlowSuccess } from "../types/flow.js";
|
|
9
9
|
// ---------------------------------------------------------------------------
|
|
10
10
|
// Default transition matrix
|
|
11
11
|
// ---------------------------------------------------------------------------
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transitions.js","sourceRoot":"","sources":["../../src/core/transitions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiBjD,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACpD,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,6GAA6G,EAAE;IACpK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,4EAA4E,EAAE;IACnI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,2FAA2F,EAAE;IAClJ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,oGAAoG,EAAE;IAC3J,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,oGAAoG,EAAE;IAC3J,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,8EAA8E,EAAE;IACrI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,kGAAkG,EAAE;IACzJ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,kEAAkE,EAAE;IACzH,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,sEAAsE,EAAE;IAC7H,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,2GAA2G,EAAE;CAClK,CAAC;AAEF,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAClC,MAA+C,EAC/C,OAAmH,EACnH,cAAgC,mBAAmB;IAEnD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,MAAiD,CAAC,CAAC;QAEnF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU;gBAAE,SAAS;YAElD,0BAA0B;YAC1B,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,SAAS;gBAAE,SAAS;YAC/C,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,SAAS;gBAAE,SAAS;YAE9C,0CAA0C;YAC1C,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YAErD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /flow:goal slash command registration.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands: set, clear, pause, resume, edit, status, show
|
|
5
|
+
*/
|
|
6
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
7
|
+
export declare function setupFlowCommand(pi: ExtensionAPI): void;
|
|
8
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/flow/command.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,+BAA+B,CAAC;AA8B3F,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAkKvD"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /flow:goal slash command registration.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands: set, clear, pause, resume, edit, status, show
|
|
5
|
+
*/
|
|
6
|
+
import { getGoal, getGoalForSession, setGoal, clearGoal, updateGoalStatus, updateGoalObjective, } from "./store.js";
|
|
7
|
+
function formatGoal(entry) {
|
|
8
|
+
const lines = [
|
|
9
|
+
`**ID:** ${entry.id}`,
|
|
10
|
+
`**Objective:** ${entry.objective}`,
|
|
11
|
+
`**Status:** ${entry.status}`,
|
|
12
|
+
`**Created:** ${entry.createdAt}`,
|
|
13
|
+
`**Updated:** ${entry.updatedAt}`,
|
|
14
|
+
];
|
|
15
|
+
if (entry.acceptance)
|
|
16
|
+
lines.push(`**Acceptance:** ${entry.acceptance}`);
|
|
17
|
+
if (entry.maxTokens !== undefined)
|
|
18
|
+
lines.push(`**Token budget:** ${entry.totalTokens}/${entry.maxTokens}`);
|
|
19
|
+
if (entry.maxFlows !== undefined)
|
|
20
|
+
lines.push(`**Flow budget:** ${entry.completedFlows.length}/${entry.maxFlows}`);
|
|
21
|
+
if (entry.completedFlows.length > 0) {
|
|
22
|
+
lines.push(`**Completed flows:**`);
|
|
23
|
+
for (const f of entry.completedFlows) {
|
|
24
|
+
lines.push(` - [${f.type}] ${f.aim}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return lines.join("\n");
|
|
28
|
+
}
|
|
29
|
+
export function setupFlowCommand(pi) {
|
|
30
|
+
pi.registerCommand("flow:goal", {
|
|
31
|
+
description: "Manage an active flow goal. Subcommands: set <objective> [--acceptance <text>] [--max-tokens <n>] [--max-flows <n>], clear, pause, resume, complete, edit <new-objective> [--acceptance <text>], status, show",
|
|
32
|
+
handler: async (args, ctx) => {
|
|
33
|
+
const trimmed = args.trim();
|
|
34
|
+
const firstSpace = trimmed.indexOf(" ");
|
|
35
|
+
const sub = (firstSpace === -1 ? trimmed : trimmed.slice(0, firstSpace)).toLowerCase();
|
|
36
|
+
const rest = firstSpace === -1 ? "" : trimmed.slice(firstSpace + 1).trim();
|
|
37
|
+
const cwd = ctx.cwd;
|
|
38
|
+
switch (sub) {
|
|
39
|
+
case "set": {
|
|
40
|
+
const acceptanceMatch = rest.match(/--acceptance\s+(.+?)(?=\s+--|$)/);
|
|
41
|
+
const maxTokensMatch = rest.match(/--max-tokens\s+(\d+)/);
|
|
42
|
+
const maxFlowsMatch = rest.match(/--max-flows\s+(\d+)/);
|
|
43
|
+
let objective = rest;
|
|
44
|
+
if (acceptanceMatch)
|
|
45
|
+
objective = objective.replace(acceptanceMatch[0], "").trim();
|
|
46
|
+
if (maxTokensMatch)
|
|
47
|
+
objective = objective.replace(maxTokensMatch[0], "").trim();
|
|
48
|
+
if (maxFlowsMatch)
|
|
49
|
+
objective = objective.replace(maxFlowsMatch[0], "").trim();
|
|
50
|
+
if (!objective) {
|
|
51
|
+
ctx.ui.notify?.("Usage: /flow:goal set <objective> [--acceptance <text>] [--max-tokens <n>] [--max-flows <n>]", "error");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const sessionId = ctx.sessionManager.getSessionId();
|
|
55
|
+
const entry = setGoal(cwd, objective, {
|
|
56
|
+
acceptance: acceptanceMatch?.[1],
|
|
57
|
+
maxTokens: maxTokensMatch ? parseInt(maxTokensMatch[1], 10) : undefined,
|
|
58
|
+
maxFlows: maxFlowsMatch ? parseInt(maxFlowsMatch[1], 10) : undefined,
|
|
59
|
+
sessionId,
|
|
60
|
+
});
|
|
61
|
+
ctx.ui.notify?.(`Goal set: ${entry.objective}`, "info");
|
|
62
|
+
const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
|
|
63
|
+
pi.sendMessage({ content: `New goal active. Call the flow tool with an appropriate type (scout, craft, build, audit, debug, ideas) to start executing.${acceptanceLine}`, display: false }, { triggerTurn: true });
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case "clear": {
|
|
67
|
+
clearGoal(cwd);
|
|
68
|
+
ctx.ui.notify?.("Goal cleared", "info");
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
case "pause": {
|
|
72
|
+
const currentSessionId = ctx.sessionManager.getSessionId();
|
|
73
|
+
const goal = getGoalForSession(cwd, currentSessionId);
|
|
74
|
+
if (goal) {
|
|
75
|
+
const entry = updateGoalStatus(cwd, "paused");
|
|
76
|
+
if (entry) {
|
|
77
|
+
ctx.ui.notify?.("Goal paused", "info");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (getGoal(cwd)) {
|
|
81
|
+
ctx.ui.notify?.("No active goal in this session to pause", "error");
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
ctx.ui.notify?.("No active goal to pause", "error");
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case "resume": {
|
|
89
|
+
const sessionId = ctx.sessionManager.getSessionId();
|
|
90
|
+
const current = getGoal(cwd);
|
|
91
|
+
if (!current) {
|
|
92
|
+
ctx.ui.notify?.("No goal to resume", "error");
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
if (current.status === "active") {
|
|
96
|
+
if (current.sessionId && current.sessionId !== sessionId) {
|
|
97
|
+
ctx.ui.notify?.("Goal is already active in another session", "info");
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
ctx.ui.notify?.("Goal is already active", "info");
|
|
101
|
+
}
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (current.sessionId && current.sessionId !== sessionId) {
|
|
105
|
+
ctx.ui.notify?.("Resuming goal from another session — it will be rebound to this session.", "warning");
|
|
106
|
+
}
|
|
107
|
+
const entry = updateGoalStatus(cwd, "active", sessionId);
|
|
108
|
+
if (entry) {
|
|
109
|
+
ctx.ui.notify?.("Goal resumed", "info");
|
|
110
|
+
const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
|
|
111
|
+
pi.sendMessage({ content: `Goal resumed. Continue execution by calling the flow tool with an appropriate type (scout, craft, build, audit, debug, ideas).${acceptanceLine}`, display: false }, { triggerTurn: true });
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
case "edit": {
|
|
116
|
+
const acceptanceMatch = rest.match(/--acceptance\s+(.+?)(?=\s+--|$)/);
|
|
117
|
+
let objective = rest;
|
|
118
|
+
if (acceptanceMatch)
|
|
119
|
+
objective = objective.replace(acceptanceMatch[0], "").trim();
|
|
120
|
+
if (!objective) {
|
|
121
|
+
ctx.ui.notify?.("Usage: /flow:goal edit <new-objective> [--acceptance <text>]", "error");
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const currentSessionId = ctx.sessionManager.getSessionId();
|
|
125
|
+
const previousGoal = getGoalForSession(cwd, currentSessionId);
|
|
126
|
+
if (!previousGoal) {
|
|
127
|
+
if (getGoal(cwd)) {
|
|
128
|
+
ctx.ui.notify?.("No active goal in this session to edit", "error");
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
ctx.ui.notify?.("No active goal to edit", "error");
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const previousObjective = previousGoal.objective;
|
|
136
|
+
const entry = updateGoalObjective(cwd, objective, acceptanceMatch?.[1]);
|
|
137
|
+
if (entry) {
|
|
138
|
+
ctx.ui.notify?.(`Goal updated: ${entry.objective}`, "info");
|
|
139
|
+
const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
|
|
140
|
+
pi.sendMessage({ content: `<flow-update>\nThe flow goal objective has been updated.\n\nPrevious: ${previousObjective}\nCurrent: ${entry.objective}${acceptanceLine}\n\nAdjust your plan accordingly. Continue with the revised objective. Choose the appropriate flow type.\n</flow-update>`, display: false }, { triggerTurn: true });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
ctx.ui.notify?.("No active goal to edit", "error");
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
case "status":
|
|
148
|
+
case "show": {
|
|
149
|
+
const currentSessionId = ctx.sessionManager.getSessionId();
|
|
150
|
+
const entry = getGoalForSession(cwd, currentSessionId);
|
|
151
|
+
if (entry) {
|
|
152
|
+
ctx.ui.notify?.(formatGoal(entry), "info");
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
const anyGoal = getGoal(cwd);
|
|
156
|
+
if (anyGoal) {
|
|
157
|
+
ctx.ui.notify?.(formatGoal(anyGoal) + "\n\n(belongs to another session)", "info");
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
ctx.ui.notify?.("No active goal", "info");
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case "complete": {
|
|
166
|
+
const currentSessionId = ctx.sessionManager.getSessionId();
|
|
167
|
+
const goal = getGoalForSession(cwd, currentSessionId);
|
|
168
|
+
if (goal) {
|
|
169
|
+
const entry = updateGoalStatus(cwd, "completed");
|
|
170
|
+
if (entry) {
|
|
171
|
+
ctx.ui.notify?.("Goal marked as completed", "info");
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else if (getGoal(cwd)) {
|
|
175
|
+
ctx.ui.notify?.("No active goal in this session to complete", "error");
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
ctx.ui.notify?.("No active goal to complete", "error");
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
default: {
|
|
183
|
+
ctx.ui.notify?.("Unknown subcommand. Usage: /flow:goal {set|clear|pause|resume|complete|edit|status|show}", "error");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/flow/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
2
|
+
/**
|
|
3
|
+
* Mark that a flow just completed. Called by the executor after each flow
|
|
4
|
+
* finishes. The continuation system uses this to enforce the post-completion
|
|
5
|
+
* hold, giving the user time to read the result before the next flow spawns.
|
|
6
|
+
*
|
|
7
|
+
* Per-session tracking prevents one session's flow completion from delaying
|
|
8
|
+
* another session's continuation.
|
|
9
|
+
*/
|
|
10
|
+
export declare function markFlowCompleted(sessionId?: string): void;
|
|
11
|
+
/**
|
|
12
|
+
* Shut down the idle wake-up interval. Call during process exit cleanup.
|
|
13
|
+
*/
|
|
14
|
+
export declare function shutdownWakeup(): void;
|
|
15
|
+
export declare function setupContinuation(pi: ExtensionAPI): void;
|
|
16
|
+
//# sourceMappingURL=continuation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation.d.ts","sourceRoot":"","sources":["../../src/flow/continuation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAkC,MAAM,+BAA+B,CAAC;AAoClG;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAI1D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAwGxD"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { getGoal, addTokens, updateGoalStatus } from "./store.js";
|
|
2
|
+
import { budgetLimitTemplate, idleWakeupTemplate, continuationPromptTemplate } from "./template-strings.js";
|
|
3
|
+
import { logWarn } from '../config/log.js';
|
|
4
|
+
import * as sessionRegistry from '../core/session-registry.js';
|
|
5
|
+
const SPAWN_COOLDOWN_MS = 5000;
|
|
6
|
+
const _lastSpawnAt = new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Post-flow completion hold — gives the user time to read the result before
|
|
9
|
+
* the continuation system triggers the next flow.
|
|
10
|
+
*
|
|
11
|
+
* When a flow finishes, the TUI renders the completed result. If the
|
|
12
|
+
* continuation system immediately spawns the next flow, the completed
|
|
13
|
+
* result scrolls off-screen before the user can read it.
|
|
14
|
+
*
|
|
15
|
+
* This delay is measured from the last flow completion time (tracked via
|
|
16
|
+
* _lastFlowCompleteAt) rather than from _lastSpawnAt, so the hold applies
|
|
17
|
+
* even when the cooldown has already elapsed.
|
|
18
|
+
*/
|
|
19
|
+
const FLOW_COMPLETE_HOLD_MS = 3000;
|
|
20
|
+
const _lastFlowCompleteAt = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Idle wake-up — nudges the orchestrator to keep working when the user
|
|
23
|
+
* has been idle for a long period while a goal is active.
|
|
24
|
+
*/
|
|
25
|
+
const IDLE_WAKEUP_MS = typeof process !== "undefined" && process.env.PI_FLOW_IDLE_WAKEUP_MS
|
|
26
|
+
? parseInt(process.env.PI_FLOW_IDLE_WAKEUP_MS, 10)
|
|
27
|
+
: 600_000;
|
|
28
|
+
const WAKEUP_CHECK_INTERVAL_MS = 60_000;
|
|
29
|
+
const _lastTurnEndAt = new Map();
|
|
30
|
+
let _wakeupInterval;
|
|
31
|
+
/**
|
|
32
|
+
* Mark that a flow just completed. Called by the executor after each flow
|
|
33
|
+
* finishes. The continuation system uses this to enforce the post-completion
|
|
34
|
+
* hold, giving the user time to read the result before the next flow spawns.
|
|
35
|
+
*
|
|
36
|
+
* Per-session tracking prevents one session's flow completion from delaying
|
|
37
|
+
* another session's continuation.
|
|
38
|
+
*/
|
|
39
|
+
export function markFlowCompleted(sessionId) {
|
|
40
|
+
if (sessionId) {
|
|
41
|
+
_lastFlowCompleteAt.set(sessionId, Date.now());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Shut down the idle wake-up interval. Call during process exit cleanup.
|
|
46
|
+
*/
|
|
47
|
+
export function shutdownWakeup() {
|
|
48
|
+
if (_wakeupInterval) {
|
|
49
|
+
clearInterval(_wakeupInterval);
|
|
50
|
+
_wakeupInterval = undefined;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function setupContinuation(pi) {
|
|
54
|
+
pi.on("session_start", (_event, ctx) => {
|
|
55
|
+
sessionRegistry.register(ctx.cwd, ctx.sessionManager.getSessionId());
|
|
56
|
+
_lastTurnEndAt.set(ctx.sessionManager.getSessionId(), Date.now());
|
|
57
|
+
});
|
|
58
|
+
// Idle wake-up: periodically check if the user has been idle while a goal
|
|
59
|
+
// is active, and nudge the orchestrator to keep making progress.
|
|
60
|
+
if (!_wakeupInterval) {
|
|
61
|
+
_wakeupInterval = setInterval(() => {
|
|
62
|
+
const cwd = sessionRegistry.getCwd();
|
|
63
|
+
if (!cwd)
|
|
64
|
+
return;
|
|
65
|
+
const goal = getGoal(cwd);
|
|
66
|
+
if (!goal || goal.status !== "active")
|
|
67
|
+
return;
|
|
68
|
+
const sessionId = goal.sessionId ?? "none";
|
|
69
|
+
const lastActivity = _lastTurnEndAt.get(sessionId);
|
|
70
|
+
if (!lastActivity)
|
|
71
|
+
return;
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
if (now - lastActivity > IDLE_WAKEUP_MS) {
|
|
74
|
+
_lastTurnEndAt.set(sessionId, now);
|
|
75
|
+
const maxFlowsClause = goal.maxFlows !== undefined ? `/${goal.maxFlows}` : '';
|
|
76
|
+
const tokenInfo = `${goal.totalTokens}${goal.maxTokens !== undefined ? `/${goal.maxTokens}` : ''}`;
|
|
77
|
+
const acceptanceClause = goal.acceptance ? `\nAcceptance: ${goal.acceptance}` : '';
|
|
78
|
+
const prompt = idleWakeupTemplate
|
|
79
|
+
.replace("{{objective}}", goal.objective)
|
|
80
|
+
.replace("{{acceptanceClause}}", acceptanceClause)
|
|
81
|
+
.replace("{{flowCount}}", String(goal.completedFlows.length))
|
|
82
|
+
.replace("{{maxFlows}}", String(goal.maxFlows ?? "unlimited"))
|
|
83
|
+
.replace("{{totalTokens}}", tokenInfo);
|
|
84
|
+
pi.sendMessage({ content: prompt, display: false }, { triggerTurn: true });
|
|
85
|
+
}
|
|
86
|
+
}, WAKEUP_CHECK_INTERVAL_MS);
|
|
87
|
+
}
|
|
88
|
+
pi.on("turn_end", async (event) => {
|
|
89
|
+
const cwd = sessionRegistry.getCwd();
|
|
90
|
+
if (!cwd)
|
|
91
|
+
return;
|
|
92
|
+
const goal = getGoal(cwd);
|
|
93
|
+
if (!goal || goal.status !== "active")
|
|
94
|
+
return;
|
|
95
|
+
// Session guard: only continue goals bound to the current session.
|
|
96
|
+
if (goal.sessionId && goal.sessionId !== sessionRegistry.getSessionId(cwd)) {
|
|
97
|
+
logWarn(`[pi-agent-flow] Continuation skipped: goal session ${goal.sessionId} ≠ active session ${sessionRegistry.getSessionId(cwd) ?? '(none)'}`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const goalSessionId = goal.sessionId ?? "none";
|
|
101
|
+
_lastTurnEndAt.set(goalSessionId, Date.now());
|
|
102
|
+
// Cooldown: don't re-fire within 5 seconds of last spawn for THIS goal's session
|
|
103
|
+
const now = Date.now();
|
|
104
|
+
if (now - (_lastSpawnAt.get(goalSessionId) ?? 0) < SPAWN_COOLDOWN_MS)
|
|
105
|
+
return;
|
|
106
|
+
// Post-completion hold: give the user time to read the flow result
|
|
107
|
+
// before triggering the next flow. This prevents the completed result
|
|
108
|
+
// from scrolling off-screen too fast.
|
|
109
|
+
const lastFlowComplete = _lastFlowCompleteAt.get(goalSessionId);
|
|
110
|
+
if (lastFlowComplete !== undefined && now - lastFlowComplete < FLOW_COMPLETE_HOLD_MS)
|
|
111
|
+
return;
|
|
112
|
+
_lastSpawnAt.set(goalSessionId, now);
|
|
113
|
+
// Track token usage from turn
|
|
114
|
+
const messageText = typeof event.message.content === "string"
|
|
115
|
+
? event.message.content
|
|
116
|
+
: event.message.content
|
|
117
|
+
.filter((p) => p.type === "text" && typeof p.text === "string")
|
|
118
|
+
.map((p) => p.text)
|
|
119
|
+
.join("");
|
|
120
|
+
addTokens(cwd, Math.ceil(messageText.length / 4));
|
|
121
|
+
// Budget guards — silent
|
|
122
|
+
const flowCount = goal.completedFlows.length;
|
|
123
|
+
const overTokens = goal.maxTokens !== undefined && goal.totalTokens >= goal.maxTokens;
|
|
124
|
+
const overFlows = goal.maxFlows !== undefined && flowCount >= goal.maxFlows;
|
|
125
|
+
// Budget guards — actually pause when exceeded
|
|
126
|
+
if (overTokens || overFlows) {
|
|
127
|
+
updateGoalStatus(cwd, "paused");
|
|
128
|
+
const pausedPrompt = budgetLimitTemplate
|
|
129
|
+
.replace("{{objective}}", goal.objective)
|
|
130
|
+
.replace("{{totalTokens}}", String(goal.totalTokens))
|
|
131
|
+
.replace("{{maxTokens}}", String(goal.maxTokens ?? "unlimited"))
|
|
132
|
+
.replace("{{flowCount}}", String(flowCount))
|
|
133
|
+
.replace("{{maxFlows}}", String(goal.maxFlows ?? "unlimited"));
|
|
134
|
+
pi.sendMessage({ content: pausedPrompt, display: false }, { triggerTurn: true });
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// Build a continuation prompt with goal context
|
|
138
|
+
const maxFlowsClause = goal.maxFlows !== undefined ? `/${goal.maxFlows}` : '';
|
|
139
|
+
const tokenInfo = `${goal.totalTokens}${goal.maxTokens !== undefined ? `/${goal.maxTokens}` : ''}`;
|
|
140
|
+
const acceptanceClause = goal.acceptance ? `\nAcceptance: ${goal.acceptance}` : '';
|
|
141
|
+
const continuationPrompt = continuationPromptTemplate
|
|
142
|
+
.replace('{{objective}}', goal.objective)
|
|
143
|
+
.replace('{{acceptanceClause}}', acceptanceClause)
|
|
144
|
+
.replace('{{flowCount}}', String(flowCount))
|
|
145
|
+
.replace('{{maxFlowsClause}}', maxFlowsClause)
|
|
146
|
+
.replace('{{tokenInfo}}', tokenInfo)
|
|
147
|
+
.replace('{{userMessage}}', messageText);
|
|
148
|
+
pi.sendMessage({ content: continuationPrompt, display: false }, { triggerTurn: true });
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=continuation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation.js","sourceRoot":"","sources":["../../src/flow/continuation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow goal module — barrel export and registration entry point.
|
|
3
|
+
*/
|
|
4
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
5
|
+
import { setupFlowCommand } from "./command.js";
|
|
6
|
+
import { setupWarpCommand } from "./warp-command.js";
|
|
7
|
+
import { setupContinuation } from "./continuation.js";
|
|
8
|
+
import * as sessionRegistry from "../core/session-registry.js";
|
|
9
|
+
export type { GoalState, GoalEntry, GoalStatus, GoalContext, } from "./types.js";
|
|
10
|
+
export { getGoal, getGoalForSession, setGoal, clearGoal, updateGoalStatus, updateGoalObjective, recordFlowCompletion, addTokens, } from "./store.js";
|
|
11
|
+
export { setupFlowCommand, setupContinuation, setupWarpCommand };
|
|
12
|
+
export { markFlowCompleted, shutdownWakeup } from "./continuation.js";
|
|
13
|
+
export { sessionRegistry };
|
|
14
|
+
export declare function registerFlow(pi: ExtensionAPI): void;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flow/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAE/D,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CASnD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow goal module — barrel export and registration entry point.
|
|
3
|
+
*/
|
|
4
|
+
import { setupFlowCommand } from "./command.js";
|
|
5
|
+
import { setupSettingsCommand } from "./settings-command.js";
|
|
6
|
+
import { setupWarpCommand } from "./warp-command.js";
|
|
7
|
+
import { setupContinuation } from "./continuation.js";
|
|
8
|
+
import * as sessionRegistry from "../core/session-registry.js";
|
|
9
|
+
export { getGoal, getGoalForSession, setGoal, clearGoal, updateGoalStatus, updateGoalObjective, recordFlowCompletion, addTokens, } from "./store.js";
|
|
10
|
+
export { setupFlowCommand, setupContinuation, setupWarpCommand };
|
|
11
|
+
export { markFlowCompleted, shutdownWakeup } from "./continuation.js";
|
|
12
|
+
export { sessionRegistry };
|
|
13
|
+
export function registerFlow(pi) {
|
|
14
|
+
pi.on("session_start", (_event, ctx) => {
|
|
15
|
+
sessionRegistry.register(ctx.cwd, ctx.sessionManager.getSessionId());
|
|
16
|
+
});
|
|
17
|
+
setupFlowCommand(pi);
|
|
18
|
+
setupSettingsCommand(pi);
|
|
19
|
+
setupWarpCommand(pi);
|
|
20
|
+
setupContinuation(pi);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flow/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAS/D,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,MAAM,UAAU,YAAY,CAAC,EAAgB;IAC3C,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,GAAqB,EAAE,EAAE;QACvD,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrB,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACzB,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /flow:settings slash command registration.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands: steering, strategic-hint, animation, glitch,
|
|
5
|
+
* tool-optimize, structured-output, session-mode, max-concurrency, reset
|
|
6
|
+
*
|
|
7
|
+
* When called with no arguments, opens an interactive TUI overlay.
|
|
8
|
+
*/
|
|
9
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
10
|
+
import { type Component, type KeybindingsManager } from "@mariozechner/pi-tui";
|
|
11
|
+
export interface SettingItem {
|
|
12
|
+
id: string;
|
|
13
|
+
label: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
currentValue: string;
|
|
16
|
+
values?: string[];
|
|
17
|
+
submenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;
|
|
18
|
+
editable?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface SettingsListTheme {
|
|
21
|
+
label: (text: string, selected: boolean) => string;
|
|
22
|
+
value: (text: string, selected: boolean) => string;
|
|
23
|
+
description: (text: string) => string;
|
|
24
|
+
cursor: string;
|
|
25
|
+
hint: (text: string) => string;
|
|
26
|
+
}
|
|
27
|
+
export declare class SettingsList implements Component {
|
|
28
|
+
private items;
|
|
29
|
+
private theme;
|
|
30
|
+
private selectedIndex;
|
|
31
|
+
private maxVisible;
|
|
32
|
+
private onChange;
|
|
33
|
+
private onCancel;
|
|
34
|
+
private keybindings;
|
|
35
|
+
private submenuComponent;
|
|
36
|
+
private submenuItemIndex;
|
|
37
|
+
constructor(items: SettingItem[], maxVisible: number, theme: SettingsListTheme, keybindings: KeybindingsManager, onChange: (id: string, newValue: string) => void, onCancel: () => void);
|
|
38
|
+
updateValue(id: string, newValue: string): void;
|
|
39
|
+
invalidate(): void;
|
|
40
|
+
render(width: number): string[];
|
|
41
|
+
private renderMainList;
|
|
42
|
+
handleInput(data: string): void;
|
|
43
|
+
private stepValue;
|
|
44
|
+
private activateItem;
|
|
45
|
+
private closeSubmenu;
|
|
46
|
+
private formatOptionsInline;
|
|
47
|
+
private openSubmenu;
|
|
48
|
+
private addHintLine;
|
|
49
|
+
}
|
|
50
|
+
export declare function setupSettingsCommand(pi: ExtensionAPI): void;
|
|
51
|
+
//# sourceMappingURL=settings-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-command.d.ts","sourceRoot":"","sources":["../../src/flow/settings-command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAkC,MAAM,+BAA+B,CAAC;AAKlG,OAAO,EAEN,KAAK,SAAS,EAEd,KAAK,kBAAkB,EAUvB,MAAM,sBAAsB,CAAC;AAW9B,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,KAAK,SAAS,CAAC;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IACnD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IACnD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/B;AAED,qBAAa,YAAa,YAAW,SAAS;IAC7C,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAAuB;gBAG9C,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,EAChD,QAAQ,EAAE,MAAM,IAAI;IAUrB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO/C,UAAU,IAAI,IAAI;IAIlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAO/B,OAAO,CAAC,cAAc;IAkEtB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA4B/B,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;CAInB;AA2TD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAmZ3D"}
|