@henryqw/pi-prompt-creator 1.0.1 → 1.0.3

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 CHANGED
@@ -49,7 +49,7 @@ The menu adapts to the current state:
49
49
 
50
50
  Only one analysis can run at a time. A pending candidate blocks another analysis.
51
51
 
52
- Analysis uses a one-turn child with no base tools, user extensions, Skills, or saved session. The extension does not retry failed analysis.
52
+ Analysis asks a tool-free child for one JSON response. It has no user extensions, Skills, or saved session. The extension does not retry failed analysis.
53
53
 
54
54
  New user input does not stop a running child. Branch navigation discards its old result without stopping the child.
55
55
 
@@ -59,10 +59,10 @@ New user input does not stop a running child. Branch navigation discards its old
59
59
 
60
60
  | Field | Required | Possible values | Default |
61
61
  | --- | --- | --- | --- |
62
- | `automatic` | Yes | `true` or `false` | `false` |
62
+ | `automatic` | No | `true` or `false` | `true` |
63
63
  | `inputThreshold` | No | Positive integer | `3` |
64
64
 
65
- Edit `inputThreshold`, then run `/reload` to apply the change.
65
+ Edit either field, then run `/reload` to apply the change. Omitted fields use their defaults.
66
66
 
67
67
  A missing file quietly uses both defaults. Startup never creates or rewrites the file.
68
68
 
@@ -76,7 +76,9 @@ Only `Automatic On` or `Automatic Off` writes the config. Toggling preserves the
76
76
 
77
77
  ## Privacy
78
78
 
79
- Analysis sends the current conversation to the child model configured through `/task-models`.
79
+ Automatic analysis is on by default. It sends the current conversation to the child model configured through `/task-models`.
80
+
81
+ Disable automatic analysis through `/promptor`.
80
82
 
81
83
  The payload includes the active compaction or branch summary, user text, and successfully completed assistant text. It also includes effective prompt names and descriptions.
82
84
 
@@ -84,8 +86,6 @@ Project context files and prompt templates are disabled for the child.
84
86
 
85
87
  Tool traffic, thinking, images, custom messages, and inactive branches are excluded.
86
88
 
87
- Automatic analysis is off by default. It starts only after you enable it through `/promptor`.
88
-
89
89
  ## Automatic mode
90
90
 
91
91
  Automatic mode waits for the configured number of non-empty user inputs. The default is three.
@@ -12,6 +12,7 @@ import {
12
12
  import { createConfigStore } from "@henryqw/pi-config-store";
13
13
  import {
14
14
  createEphemeralSubagentExecutor,
15
+ MIN_MAX_TURNS,
15
16
  resolveRoleLaunch,
16
17
  type EphemeralSubagentExecutor,
17
18
  type Role,
@@ -80,16 +81,16 @@ function exactKeys(value: Record<string, unknown>, keys: readonly string[]): boo
80
81
  function parseConfig(value: unknown): Config {
81
82
  if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("Config must be an object.");
82
83
  const config = value as Record<string, unknown>;
83
- const validKeys = exactKeys(config, ["automatic"]) || exactKeys(config, ["automatic", "inputThreshold"]);
84
- const inputThreshold = config.inputThreshold ?? DEFAULT_INPUT_THRESHOLD;
84
+ const validKeys = Object.keys(config).every((key) => key === "automatic" || key === "inputThreshold");
85
+ const { automatic = true, inputThreshold = DEFAULT_INPUT_THRESHOLD } = config;
85
86
  if (
86
87
  !validKeys
87
- || typeof config.automatic !== "boolean"
88
+ || typeof automatic !== "boolean"
88
89
  || typeof inputThreshold !== "number"
89
90
  || !Number.isSafeInteger(inputThreshold)
90
91
  || inputThreshold < 1
91
- ) throw new Error("Config must contain automatic:boolean and an optional positive integer inputThreshold.");
92
- return { automatic: config.automatic, inputThreshold };
92
+ ) throw new Error("Config may contain automatic:boolean and inputThreshold:positive integer.");
93
+ return { automatic, inputThreshold };
93
94
  }
94
95
 
95
96
  export function isPromptName(value: unknown): value is string {
@@ -268,7 +269,7 @@ export default function promptCreatorExtension(pi: ExtensionAPI, options: Prompt
268
269
  const configStore = createConfigStore<Config>({
269
270
  extensionId: EXTENSION_ID,
270
271
  agentDir,
271
- defaults: () => ({ automatic: false, inputThreshold: DEFAULT_INPUT_THRESHOLD }),
272
+ defaults: () => ({ automatic: true, inputThreshold: DEFAULT_INPUT_THRESHOLD }),
272
273
  parse: parseConfig,
273
274
  });
274
275
  let executor = options.executor;
@@ -308,7 +309,7 @@ export default function promptCreatorExtension(pi: ExtensionAPI, options: Prompt
308
309
  };
309
310
  const getExecutor = () => executor ??= createEphemeralSubagentExecutor({
310
311
  maxConcurrency: 1,
311
- maxTurns: 1,
312
+ maxTurns: MIN_MAX_TURNS,
312
313
  timeout: { idleMs: 2 * 60_000, maxMs: 5 * 60_000 },
313
314
  });
314
315
  const startAnalysis = (ctx: ExtensionContext, manual: boolean) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@henryqw/pi-prompt-creator",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Turn current Pi conversation signals into user-approved prompt templates.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@henryqw/pi-config-store": "^1.0.0",
49
- "@henryqw/pi-subagent": "^13.0.0",
49
+ "@henryqw/pi-subagent": "^14.0.0",
50
50
  "@henryqw/pi-task-models": "^5.0.0"
51
51
  }
52
52
  }