knowzcode 0.1.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/.claude-plugin/marketplace.json +9 -3
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +170 -73
  4. package/agents/analyst.md +24 -62
  5. package/agents/architect.md +60 -48
  6. package/agents/builder.md +35 -86
  7. package/agents/closer.md +29 -87
  8. package/agents/context-scout.md +54 -0
  9. package/agents/knowledge-migrator.md +7 -7
  10. package/agents/knowz-scout.md +83 -0
  11. package/agents/knowz-scribe.md +155 -0
  12. package/agents/microfix-specialist.md +1 -6
  13. package/agents/project-advisor.md +110 -0
  14. package/agents/reviewer.md +43 -91
  15. package/agents/security-officer.md +194 -0
  16. package/agents/test-advisor.md +162 -0
  17. package/agents/update-coordinator.md +7 -18
  18. package/bin/knowzcode.mjs +94 -7
  19. package/commands/audit.md +245 -25
  20. package/commands/connect-mcp.md +525 -507
  21. package/commands/fix.md +8 -8
  22. package/commands/init.md +125 -6
  23. package/commands/learn.md +327 -308
  24. package/commands/plan.md +173 -26
  25. package/commands/register.md +21 -12
  26. package/commands/status.md +309 -291
  27. package/commands/telemetry.md +188 -188
  28. package/commands/work.md +764 -114
  29. package/knowzcode/automation_manifest.md +59 -59
  30. package/knowzcode/claude_code_execution.md +291 -22
  31. package/knowzcode/copilot_execution.md +231 -0
  32. package/knowzcode/enterprise/compliance_manifest.md +5 -0
  33. package/knowzcode/knowzcode_loop.md +114 -46
  34. package/knowzcode/knowzcode_orchestration.md +66 -0
  35. package/knowzcode/knowzcode_project.md +48 -233
  36. package/knowzcode/knowzcode_vaults.md +183 -54
  37. package/knowzcode/mcp_config.md +72 -47
  38. package/knowzcode/platform_adapters.md +630 -29
  39. package/knowzcode/prompts/Execute_Micro_Fix.md +57 -57
  40. package/knowzcode/prompts/Investigate_Codebase.md +227 -227
  41. package/knowzcode/prompts/Migrate_Knowledge.md +301 -301
  42. package/knowzcode/prompts/Refactor_Node.md +72 -72
  43. package/knowzcode/prompts/Spec_Verification_Checkpoint.md +59 -59
  44. package/knowzcode/prompts/[LOOP_1A]__Propose_Change_Set.md +52 -52
  45. package/knowzcode/prompts/[LOOP_1B]__Draft_Specs.md +75 -75
  46. package/knowzcode/prompts/[LOOP_2A]__Implement_Change_Set.md +55 -55
  47. package/knowzcode/prompts/[LOOP_2B]__Verify_Implementation.md +72 -72
  48. package/knowzcode/prompts/[LOOP_3]__Finalize_And_Commit.md +67 -67
  49. package/package.json +1 -1
  50. package/skills/alias-resolver.json +1 -1
  51. package/skills/architecture-diff.json +1 -1
  52. package/skills/check-installation-status.json +1 -1
  53. package/skills/continue.md +25 -4
  54. package/skills/environment-guard.json +1 -1
  55. package/skills/generate-workgroup-id.json +1 -1
  56. package/skills/install-knowzcode.json +1 -1
  57. package/skills/load-core-context.json +1 -1
  58. package/skills/log-entry-builder.json +1 -1
  59. package/skills/spec-quality-check.json +1 -1
  60. package/skills/spec-template.json +1 -1
  61. package/skills/spec-validator.json +1 -1
  62. package/skills/tracker-scan.json +1 -1
  63. package/skills/tracker-update.json +1 -1
  64. package/skills/validate-installation.json +1 -1
package/commands/plan.md CHANGED
@@ -26,54 +26,165 @@ If no argument provided, ask: "What would you like me to research?"
26
26
 
27
27
  If `knowzcode/` doesn't exist, inform user to run `/kc:init` first. STOP.
28
28
 
29
- ## Step 3: Launch Parallel Investigation
29
+ ## Step 3: Set Up Execution Mode
30
30
 
31
- ### Agent Teams Mode (if available)
31
+ Attempt `TeamCreate(team_name="kc-plan-{slug}")` (2-4 word kebab-case from topic):
32
32
 
33
- Spawn three teammates to investigate simultaneously:
33
+ - **If TeamCreate succeeds** Agent Teams mode:
34
+ 1. Announce: `**Execution Mode: Agent Teams** — created team kc-plan-{slug}`
35
+ 2. Read `knowzcode/claude_code_execution.md` for team conventions.
36
+ 3. You are the **team lead** — coordinate research, synthesize findings.
34
37
 
35
- 1. Spawn `analyst` teammate:
38
+ - **If TeamCreate fails** (error, unrecognized tool, timeout) → Subagent Delegation:
39
+ - Announce: `**Execution Mode: Subagent Delegation** — Agent Teams not available, using Task() fallback`
40
+
41
+ The user MUST see the execution mode announcement before investigation begins.
42
+
43
+ ## Step 3.5: Load Orchestration Config (Optional)
44
+
45
+ If `knowzcode/knowzcode_orchestration.md` exists, parse:
46
+ 1. `SCOUT_MODE` = `scout_mode` value (default: "full")
47
+ 2. `MCP_AGENTS_ENABLED` = `mcp_agents_enabled` value (default: true)
48
+
49
+ Flag overrides: `--no-scouts` → `SCOUT_MODE = "none"`, `--no-mcp` → `MCP_AGENTS_ENABLED = false`
50
+
51
+ If file doesn't exist, use defaults. Other config settings (`max_builders`, `default_specialists`) are not applicable to `/kc:plan`.
52
+
53
+ ## Step 4: Launch Parallel Investigation
54
+
55
+ ### MCP Probe
56
+
57
+ Before spawning agents, determine vault availability:
58
+ 1. Read `knowzcode/knowzcode_vaults.md` — partition entries into CONFIGURED (non-empty ID) and UNCREATED (empty ID)
59
+ 2. Call `list_vaults(includeStats=true)` **always** — regardless of whether any IDs exist in the file
60
+ 3. If `list_vaults()` fails → set `MCP_ACTIVE = false`, announce `**MCP Status: Not connected**`, skip vault setup
61
+ 4. If `list_vaults()` succeeds AND UNCREATED list is non-empty → present the **Vault Creation Prompt**:
62
+
63
+ ```markdown
64
+ ## Vault Setup
65
+
66
+ Your Knowz API key is valid and MCP is connected, but {N} default vault(s) haven't been created yet.
67
+ Creating vaults enables knowledge capture throughout the workflow:
68
+
69
+ | Vault | Type | Description | Written During |
70
+ |-------|------|-------------|----------------|
71
+ ```
72
+
73
+ Build table rows dynamically from the UNCREATED entries only. Derive "Written During" from each vault's Write Conditions field in `knowzcode_vaults.md`.
74
+
75
+ Then present options:
76
+ ```
77
+ Options:
78
+ **A) Create all {N} vaults** (recommended)
79
+ **B) Select which to create**
80
+ **C) Skip** — proceed without vaults (can create later with `/kc:connect-mcp --configure-vaults`)
81
+ ```
82
+
83
+ 5. Handle user selection:
84
+ - **A**: For each UNCREATED entry, call MCP `create_vault(name, description)`. If `create_vault` is not available, fall back to matching by name against `list_vaults()` results. Update `knowzcode_vaults.md`: fill ID field, change H3 heading from `(not created)` to vault ID. Report any failures.
85
+ - **B**: Ask which vaults to create, then create only selected ones.
86
+ - **C**: Log `"Vault creation skipped — knowledge capture disabled."` Continue.
87
+ 6. After resolution, set:
88
+ - `MCP_ACTIVE = true` (MCP works regardless of vault creation outcome)
89
+ - `VAULTS_CONFIGURED = true` if at least 1 vault now has a valid ID, else `false`
90
+ - Announce: `**MCP Status: Connected — N vault(s) available**` or `**MCP Status: Connected — no vaults configured (knowledge capture disabled)**`
91
+
92
+ ### Agent Teams Mode (with scouts)
93
+
94
+ Create tasks first, pre-assign, then spawn with task IDs:
95
+
96
+ 1. If `SCOUT_MODE != "none"`: `TaskCreate("Scout: local context for {topic}")` → `TaskUpdate(owner: "context-scout")`
97
+ 2. `TaskCreate("Scout: vault knowledge for {topic}")` → `TaskUpdate(owner: "knowz-scout")` (if `VAULTS_CONFIGURED = true` AND `MCP_AGENTS_ENABLED = true`)
98
+ 3. `TaskCreate("Research: code exploration")` → `TaskUpdate(owner: "analyst")`
99
+ 4. `TaskCreate("Research: architecture")` → `TaskUpdate(owner: "architect")`
100
+ 5. `TaskCreate("Research: security + quality")` → `TaskUpdate(owner: "reviewer")`
101
+
102
+ Spawn teammates with their task IDs (count depends on SCOUT_MODE and MCP settings):
103
+
104
+ 1. If `SCOUT_MODE != "none"`, spawn `context-scout` teammate:
105
+ > **Your Task**: #{task-id} — claim immediately (`TaskUpdate(status: "in_progress")`). Mark completed with summary when done.
106
+ > You are researching "{topic}" from a **knowzcode history** angle.
107
+ > Read `agents/context-scout.md` for your role definition.
108
+ > Read `knowzcode/claude_code_execution.md` for team conventions.
109
+ > Find: existing specs, prior WorkGroups, tracker entries relevant to this topic.
110
+ > Broadcast findings to all teammates.
111
+
112
+ 2. If `VAULTS_CONFIGURED = true` AND `MCP_AGENTS_ENABLED = true`, spawn `knowz-scout` teammate:
113
+ > **Your Task**: #{task-id} — claim immediately (`TaskUpdate(status: "in_progress")`). Mark completed with summary when done.
114
+ > You are researching "{topic}" from a **vault knowledge** angle.
115
+ > Read `agents/knowz-scout.md` for your role definition.
116
+ > Read `knowzcode/claude_code_execution.md` for team conventions.
117
+ > Query: team conventions, past decisions, similar implementations.
118
+ > Broadcast findings to all teammates.
119
+
120
+ 3. Spawn `analyst` teammate:
121
+ > **Your Task**: #{task-id} — claim immediately (`TaskUpdate(status: "in_progress")`). Mark completed with summary when done.
36
122
  > You are researching "{topic}" from a **code exploration** angle.
37
123
  > Read `agents/analyst.md` for your role definition.
38
124
  > Read `knowzcode/claude_code_execution.md` for team conventions.
39
125
  > Investigate: affected files, dependencies, existing patterns.
40
126
  > Max 10 tool calls. Write findings to a concise summary.
41
127
 
42
- 2. Spawn `architect` teammate:
128
+ 4. Spawn `architect` teammate:
129
+ > **Your Task**: #{task-id} — claim immediately (`TaskUpdate(status: "in_progress")`). Mark completed with summary when done.
43
130
  > You are researching "{topic}" from an **architecture** angle.
44
131
  > Read `agents/architect.md` for your role definition.
45
132
  > Read `knowzcode/claude_code_execution.md` for team conventions.
46
133
  > Investigate: layer analysis, design implications, pattern fit.
47
134
  > Max 10 tool calls. Write findings to a concise summary.
48
135
 
49
- 3. Spawn `reviewer` teammate:
136
+ 5. Spawn `reviewer` teammate:
137
+ > **Your Task**: #{task-id} — claim immediately (`TaskUpdate(status: "in_progress")`). Mark completed with summary when done.
50
138
  > You are researching "{topic}" from a **security and quality** angle.
51
139
  > Read `agents/reviewer.md` for your role definition.
52
140
  > Read `knowzcode/claude_code_execution.md` for team conventions.
53
141
  > Investigate: risks, performance concerns, quality gaps.
54
142
  > Max 10 tool calls. Write findings to a concise summary.
55
143
 
56
- Create three tasks (no dependencies all run in parallel).
57
- Wait for all three to complete, then synthesize in Step 5.
58
-
59
- ### Subagent Mode (fallback)
60
-
61
- Delegate to three agents in parallel via `Task()`:
62
- - **analyst**: Code exploration — affected files, dependencies, existing patterns
63
- - **architect**: Architecture assessment layer analysis, design implications, pattern fit
64
- - **reviewer**: Security and quality risks, performance concerns, quality gaps
144
+ Scouts broadcast findings; all three core researchers consume them.
145
+ Wait for all to complete, then synthesize in Step 5.
146
+
147
+ ### Subagent Mode
148
+
149
+ Delegate to up to five agents in parallel via `Task()`:
150
+
151
+ 1. **context-scout**Local context (if `SCOUT_MODE != "none"`):
152
+ - `SCOUT_MODE = "full"` (default): 3 parallel instances:
153
+ - `Task(subagent_type="context-scout", name="context-scout-specs", description="Scout: specs context", prompt="Research \"{topic}\". Focus: knowzcode/specs/*.md — scan existing specifications for relevant NodeIDs, status, VERIFY criteria. Max 10 tool calls. Write findings to a concise summary.")`
154
+ - `Task(subagent_type="context-scout", name="context-scout-workgroups", description="Scout: workgroups context", prompt="Research \"{topic}\". Focus: knowzcode/workgroups/*.md — scan previous WorkGroups for similar goals, what was tried, what succeeded/failed. Max 10 tool calls. Write findings to a concise summary.")`
155
+ - `Task(subagent_type="context-scout", name="context-scout-backlog", description="Scout: backlog context", prompt="Research \"{topic}\". Focus: knowzcode/knowzcode_tracker.md, knowzcode/knowzcode_log.md, knowzcode/knowzcode_architecture.md, knowzcode/knowzcode_project.md — scan for active WIP, REFACTOR tasks, architecture summary, recent log patterns. Max 10 tool calls. Write findings to a concise summary.")`
156
+ - `SCOUT_MODE = "minimal"`: 1 combined instance:
157
+ - `Task(subagent_type="context-scout", name="context-scout", description="Scout: combined context", prompt="Research \"{topic}\". Focus: ALL local context — knowzcode/specs/*.md, knowzcode/workgroups/*.md, knowzcode/knowzcode_tracker.md, knowzcode/knowzcode_log.md, knowzcode/knowzcode_architecture.md, knowzcode/knowzcode_project.md. Max 10 tool calls. Write findings to a concise summary.")`
158
+
159
+ 2. **knowz-scout** — MCP knowledge (if `VAULTS_CONFIGURED = true` AND `MCP_AGENTS_ENABLED = true`):
160
+ - `Task(subagent_type="knowz-scout", description="Scout: vault knowledge", prompt="Research \"{topic}\". Read knowzcode/knowzcode_vaults.md to discover configured vaults. Query each for relevant knowledge: team conventions, past decisions, similar implementations. Max 10 tool calls. Write findings to a concise summary.")`
161
+
162
+ 3. **analyst** — Code exploration:
163
+ - `subagent_type`: `"analyst"`
164
+ - `prompt`: Task-specific context only (role definition is auto-loaded from `agents/analyst.md`):
165
+ > Research "{topic}" from a **code exploration** angle.
166
+ > Investigate: affected files, dependencies, existing patterns.
167
+ > Max 10 tool calls. Write findings to a concise summary.
168
+ - `description`: `"Plan research: code exploration"`
169
+
170
+ 4. **architect** — Architecture assessment:
171
+ - `subagent_type`: `"architect"`
172
+ - `prompt`: Task-specific context only (role definition is auto-loaded from `agents/architect.md`):
173
+ > Research "{topic}" from an **architecture** angle.
174
+ > Investigate: layer analysis, design implications, pattern fit.
175
+ > Max 10 tool calls. Write findings to a concise summary.
176
+ - `description`: `"Plan research: architecture"`
177
+
178
+ 5. **reviewer** — Security and quality:
179
+ - `subagent_type`: `"reviewer"`
180
+ - `prompt`: Task-specific context only (role definition is auto-loaded from `agents/reviewer.md`):
181
+ > Research "{topic}" from a **security and quality** angle.
182
+ > Investigate: risks, performance concerns, quality gaps.
183
+ > Max 10 tool calls. Write findings to a concise summary.
184
+ - `description`: `"Plan research: security and quality"`
65
185
 
66
186
  Each uses focused, efficient scoping (max 10 tool calls).
67
187
 
68
- ## Step 4: Check Existing Knowledge (in parallel)
69
-
70
- While agents investigate, also check:
71
- - `knowzcode/specs/*.md` for relevant specifications
72
- - `knowzcode/knowzcode_tracker.md` for related WorkGroups
73
- - `knowzcode/workgroups/*.md` for prior related work
74
-
75
- If MCP is configured: `search_knowledge(research_vault, "{topic}")` for past decisions.
76
-
77
188
  ## Step 5: Synthesize Findings
78
189
 
79
190
  ```markdown
@@ -88,9 +199,10 @@ If MCP is configured: `search_knowledge(research_vault, "{topic}")` for past dec
88
199
  ### Security & Quality
89
200
  {summarized findings from reviewer}
90
201
 
91
- ### Existing Knowledge
202
+ ### Existing Knowledge (from scouts)
92
203
  - **Relevant Specs**: {list or "None found"}
93
204
  - **Prior WorkGroups**: {list or "None found"}
205
+ - **Vault Knowledge**: {list or "N/A — MCP not configured"}
94
206
 
95
207
  ### Recommended Approaches
96
208
 
@@ -105,6 +217,19 @@ If MCP is configured: `search_knowledge(research_vault, "{topic}")` for past dec
105
217
  ### Risks & Considerations
106
218
  {synthesized risks}
107
219
 
220
+ ### Complexity Assessment
221
+ - **Files identified**: {count} — {file list}
222
+ - **Potential NodeIDs**: {count} — {brief descriptions}
223
+ - **Architectural impact**: Yes/No — {reason if yes}
224
+ - **Security-sensitive**: Yes/No — {reason if yes}
225
+ - **External integrations**: Yes/No — {list if yes}
226
+ - **Estimated scope**: ~{N} lines across {M} files
227
+ - **Recommended tier**: Tier 2 (Light) / Tier 3 (Full)
228
+
229
+ Tier recommendation follows work.md's classification rules:
230
+ - **Tier 3** if ANY: >3 files, >1 NodeID, architectural impact, security-sensitive, external integrations
231
+ - **Tier 2** if ALL: ≤3 files, single NodeID, no arch changes, no security, no external APIs
232
+
108
233
  ---
109
234
 
110
235
  **Ready to implement?** Say "implement", "do option 1", or "go ahead" to start `/kc:work` with this context.
@@ -114,7 +239,29 @@ If MCP is configured: `search_knowledge(research_vault, "{topic}")` for past dec
114
239
 
115
240
  Watch for: "implement", "do it", "go ahead", "option N", "start work", "build this"
116
241
 
117
- When triggered, invoke `/kc:work "{original_topic}"` with investigation context.
242
+ When triggered, invoke `/kc:work "{original_topic}" --tier {recommended_tier}` and include
243
+ a summary of investigation findings:
244
+
245
+ > **Plan investigation context:**
246
+ > - Files: {file list from complexity assessment}
247
+ > - Potential NodeIDs: {list}
248
+ > - Key risks: {top risks}
249
+ > - Recommended approach: {selected option or top recommendation}
250
+
251
+ This context gives work's analyst a head start and ensures correct tier classification.
252
+
253
+ ---
254
+
255
+ ## Cleanup
256
+
257
+ After synthesis is complete (or if the user cancels):
258
+
259
+ **Agent Teams Mode**:
260
+ 1. Shut down all active teammates. Wait for each to confirm shutdown.
261
+ 2. Once all teammates have shut down, clean up the team.
262
+ No teammates or team resources should remain after the research ends.
263
+
264
+ **Subagent Mode**: No cleanup needed — `Task()` calls are self-contained.
118
265
 
119
266
  ---
120
267
 
@@ -368,23 +368,29 @@ curl -X POST https://api.dev.knowz.io/api/v1/auth/register \
368
368
 
369
369
  ## Vaults
370
370
 
371
- ### Research Vault (Primary)
371
+ ### Ecosystem Vault (Primary)
372
372
  - **Vault ID**: {vault_id from registration}
373
373
  - **Vault Name**: {vault_name from registration}
374
- - **Purpose**: Learnings, conventions, decisions, patterns
374
+ - **Purpose**: Decisions, conventions, security, integrations, business rules
375
375
  - **Auto-configured**: Yes (via /kc:register)
376
376
 
377
377
  ### Code Vault (Optional)
378
378
  - **Vault ID**: (not configured)
379
- - **Purpose**: Indexed source code for semantic search
379
+ - **Purpose**: Implementation patterns, workarounds, performance
380
380
  - **Note**: Code search uses local grep/glob by default.
381
381
  Configure code vault for large codebases with /kc:connect-mcp --configure-vaults
382
+
383
+ ### Finalizations Vault (Optional)
384
+ - **Vault ID**: (not configured)
385
+ - **Purpose**: WorkGroup completion summaries, outcome records
386
+ - **Note**: Finalizations vault tracks completed work.
387
+ Configure for teams that want searchable completion history.
382
388
  ```
383
389
 
384
390
  **Edge case - existing vault config**:
385
- If `knowzcode/mcp_config.md` already has a Research Vault ID configured:
391
+ If `knowzcode/mcp_config.md` already has an Ecosystem Vault ID configured:
386
392
  - Use AskUserQuestion: "You already have a vault configured. Replace with new vault from registration? [Yes/No/Keep both]"
387
- - If "Yes": Replace Research Vault ID
393
+ - If "Yes": Replace Ecosystem Vault ID
388
394
  - If "No": Keep existing vault config
389
395
  - If "Keep both": Add new vault as secondary
390
396
 
@@ -488,9 +494,9 @@ After MCP is configured and before showing the final success message, offer vaul
488
494
  ┌────┬──────────────────────┬──────────────────┬───────────┐
489
495
  │ # │ Name │ Type │ Documents │
490
496
  ├────┼──────────────────────┼──────────────────┼───────────┤
491
- │ 1 │ KnowzCode (default) │ research │ 0 │
497
+ │ 1 │ KnowzCode (default) │ ecosystem │ 0 │
492
498
  │ 2 │ my-project-code │ code │ 1,234 │
493
- │ 3 │ engineering-wiki │ research │ 89 │
499
+ │ 3 │ engineering-wiki │ ecosystem │ 89 │
494
500
  └────┴──────────────────────┴──────────────────┴───────────┘
495
501
  ```
496
502
 
@@ -545,13 +551,13 @@ After MCP is configured and before showing the final success message, offer vaul
545
551
  ### {vault_id_1}
546
552
  - **Name**: {vault_name}
547
553
  - **ID**: {vault_id}
548
- - **Type**: {code | research}
554
+ - **Type**: {code | ecosystem | finalizations}
549
555
  - **Description**: {user_provided_description}
550
556
 
551
557
  ### {vault_id_2}
552
558
  - **Name**: {vault_name}
553
559
  - **ID**: {vault_id}
554
- - **Type**: {code | research}
560
+ - **Type**: {code | ecosystem | finalizations}
555
561
  - **Description**: {user_provided_description}
556
562
 
557
563
  ---
@@ -559,10 +565,13 @@ After MCP is configured and before showing the final success message, offer vaul
559
565
  ## Vault Routing Rules
560
566
 
561
567
  - **Code questions** (implementations, files, structure) → {first code vault}
562
- - **Convention questions** (patterns, decisions, best practices) → {first research vault}
563
- - **Learning capture** → {default research vault}
568
+ - **Convention questions** (patterns, decisions, best practices) → {first ecosystem vault}
569
+ - **Completion records** → {first finalizations vault}
570
+ - **Learning capture** → {default ecosystem vault}
564
571
  ```
565
572
 
573
+ **Null GUID detection**: After writing vault configuration to `knowzcode_vaults.md`, check for entries with empty **ID** fields. If found, prompt: "Found {N} default vault(s) not yet created. Create them now?" On confirmation, create each vault via MCP and update the ID fields.
574
+
566
575
  5. **Show vault configuration summary**
567
576
 
568
577
  After writing configuration:
@@ -570,7 +579,7 @@ After MCP is configured and before showing the final success message, offer vaul
570
579
  Vault configuration saved to knowzcode/knowzcode_vaults.md
571
580
 
572
581
  Connected Vaults:
573
- • KnowzCode (research) - "Team learnings and conventions"
582
+ • KnowzCode (ecosystem) - "Team learnings and conventions"
574
583
  • my-code (code) - "Source code for API project"
575
584
 
576
585
  Queries will be automatically routed based on your descriptions.