@fro.bot/systematic 3.5.3 → 3.5.4

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.
@@ -8,7 +8,7 @@
8
8
  * See anomalyco/opencode commits 2793502db / 96a534d8c for the
9
9
  * server-side schema (PR #346 / v2.9.2 history).
10
10
  */
11
- export declare const OPENCODE_AGENT_COLOR_TOKENS: readonly ["primary", "secondary", "accent", "success", "warning", "error", "info"];
11
+ export declare const OPENCODE_AGENT_COLOR_TOKENS: readonly ['primary', 'secondary', 'accent', 'success', 'warning', 'error', 'info'];
12
12
  /**
13
13
  * Check whether a value is a valid agent color — either a hex literal
14
14
  * (`#RRGGBB`) or a named token from `OPENCODE_AGENT_COLOR_TOKENS`.
@@ -20,7 +20,7 @@ export declare function resolveAgent(catalog: AgentCatalogEntry[], name: string)
20
20
  */
21
21
  export declare function renderAgentCatalogCompact(catalog: AgentCatalogEntry[]): string;
22
22
  /** Pi built-in read-only tool names used as the default allowlist. */
23
- export declare const DEFAULT_READONLY_TOOLS: readonly ["read", "grep", "find", "ls"];
23
+ export declare const DEFAULT_READONLY_TOOLS: readonly ['read', 'grep', 'find', 'ls'];
24
24
  export interface ResolvedToolAllowlist {
25
25
  tools: string[];
26
26
  }
@@ -1,5 +1,5 @@
1
- export declare const BUNDLED_AGENT_NAMES: readonly ["adversarial-document-reviewer", "adversarial-reviewer", "agent-native-reviewer", "api-contract-reviewer", "architecture-strategist", "best-practices-researcher", "bug-reproduction-validator", "cli-readiness-reviewer", "code-simplicity-reviewer", "coherence-reviewer", "correctness-reviewer", "data-migrations-reviewer", "deployment-verification-agent", "design-iterator", "design-lens-reviewer", "feasibility-reviewer", "framework-docs-researcher", "git-history-analyzer", "issue-intelligence-analyst", "kieran-typescript-reviewer", "learnings-researcher", "maintainability-reviewer", "pattern-recognition-specialist", "performance-reviewer", "pr-comment-resolver", "previous-comments-reviewer", "product-lens-reviewer", "project-standards-reviewer", "reliability-reviewer", "repo-research-analyst", "scope-guardian-reviewer", "security-lens-reviewer", "security-reviewer", "slack-researcher", "spec-flow-analyzer", "systematic-implementer", "testing-reviewer"];
2
- export declare const BUNDLED_AGENT_QUALIFIED_IDS: readonly ["design/design-iterator", "document-review/adversarial-document-reviewer", "document-review/coherence-reviewer", "document-review/design-lens-reviewer", "document-review/feasibility-reviewer", "document-review/product-lens-reviewer", "document-review/scope-guardian-reviewer", "document-review/security-lens-reviewer", "research/best-practices-researcher", "research/framework-docs-researcher", "research/git-history-analyzer", "research/issue-intelligence-analyst", "research/learnings-researcher", "research/repo-research-analyst", "research/slack-researcher", "review/adversarial-reviewer", "review/agent-native-reviewer", "review/api-contract-reviewer", "review/architecture-strategist", "review/cli-readiness-reviewer", "review/code-simplicity-reviewer", "review/correctness-reviewer", "review/data-migrations-reviewer", "review/deployment-verification-agent", "review/kieran-typescript-reviewer", "review/maintainability-reviewer", "review/pattern-recognition-specialist", "review/performance-reviewer", "review/previous-comments-reviewer", "review/project-standards-reviewer", "review/reliability-reviewer", "review/security-reviewer", "review/testing-reviewer", "workflow/bug-reproduction-validator", "workflow/pr-comment-resolver", "workflow/spec-flow-analyzer", "workflow/systematic-implementer"];
3
- export declare const BUNDLED_SKILL_NAMES: readonly ["agent-browser", "agent-native-architecture", "agent-native-audit", "ce:brainstorm", "ce:compound", "ce:compound-refresh", "ce:ideate", "ce:plan", "ce:review", "ce:work", "compound-docs", "deepen-plan", "deploy-docs", "document-review", "frontend-design", "git-clean-gone-branches", "git-commit", "git-commit-push-pr", "git-worktree", "lfg", "onboarding", "orchestrating-subagents", "report-bug-ce", "reproduce-bug", "resolve-pr-feedback", "slfg", "test-browser", "test-driven-development", "todos", "using-systematic", "writing-skills"];
1
+ export declare const BUNDLED_AGENT_NAMES: readonly ['adversarial-document-reviewer', 'adversarial-reviewer', 'agent-native-reviewer', 'api-contract-reviewer', 'architecture-strategist', 'best-practices-researcher', 'bug-reproduction-validator', 'cli-readiness-reviewer', 'code-simplicity-reviewer', 'coherence-reviewer', 'correctness-reviewer', 'data-migrations-reviewer', 'deployment-verification-agent', 'design-iterator', 'design-lens-reviewer', 'feasibility-reviewer', 'framework-docs-researcher', 'git-history-analyzer', 'issue-intelligence-analyst', 'kieran-typescript-reviewer', 'learnings-researcher', 'maintainability-reviewer', 'pattern-recognition-specialist', 'performance-reviewer', 'pr-comment-resolver', 'previous-comments-reviewer', 'product-lens-reviewer', 'project-standards-reviewer', 'reliability-reviewer', 'repo-research-analyst', 'scope-guardian-reviewer', 'security-lens-reviewer', 'security-reviewer', 'slack-researcher', 'spec-flow-analyzer', 'systematic-implementer', 'testing-reviewer'];
2
+ export declare const BUNDLED_AGENT_QUALIFIED_IDS: readonly ['design/design-iterator', 'document-review/adversarial-document-reviewer', 'document-review/coherence-reviewer', 'document-review/design-lens-reviewer', 'document-review/feasibility-reviewer', 'document-review/product-lens-reviewer', 'document-review/scope-guardian-reviewer', 'document-review/security-lens-reviewer', 'research/best-practices-researcher', 'research/framework-docs-researcher', 'research/git-history-analyzer', 'research/issue-intelligence-analyst', 'research/learnings-researcher', 'research/repo-research-analyst', 'research/slack-researcher', 'review/adversarial-reviewer', 'review/agent-native-reviewer', 'review/api-contract-reviewer', 'review/architecture-strategist', 'review/cli-readiness-reviewer', 'review/code-simplicity-reviewer', 'review/correctness-reviewer', 'review/data-migrations-reviewer', 'review/deployment-verification-agent', 'review/kieran-typescript-reviewer', 'review/maintainability-reviewer', 'review/pattern-recognition-specialist', 'review/performance-reviewer', 'review/previous-comments-reviewer', 'review/project-standards-reviewer', 'review/reliability-reviewer', 'review/security-reviewer', 'review/testing-reviewer', 'workflow/bug-reproduction-validator', 'workflow/pr-comment-resolver', 'workflow/spec-flow-analyzer', 'workflow/systematic-implementer'];
3
+ export declare const BUNDLED_SKILL_NAMES: readonly ['agent-browser', 'agent-native-architecture', 'agent-native-audit', 'ce:brainstorm', 'ce:compound', 'ce:compound-refresh', 'ce:ideate', 'ce:plan', 'ce:review', 'ce:work', 'compound-docs', 'deepen-plan', 'deploy-docs', 'document-review', 'frontend-design', 'git-clean-gone-branches', 'git-commit', 'git-commit-push-pr', 'git-worktree', 'lfg', 'onboarding', 'orchestrating-subagents', 'report-bug-ce', 'reproduce-bug', 'resolve-pr-feedback', 'slfg', 'test-browser', 'test-driven-development', 'todos', 'using-systematic', 'writing-skills'];
4
4
  export type BundledAgentName = (typeof BUNDLED_AGENT_NAMES)[number];
5
5
  export type BundledSkillName = (typeof BUNDLED_SKILL_NAMES)[number];
@@ -16,9 +16,9 @@
16
16
  import { z } from 'zod';
17
17
  export declare const WorkflowGuardSchema: z.ZodDefault<z.ZodObject<{
18
18
  mode: z.ZodDefault<z.ZodEnum<{
19
+ disabled: "disabled";
19
20
  observe: "observe";
20
21
  protected: "protected";
21
- disabled: "disabled";
22
22
  }>>;
23
23
  debug: z.ZodDefault<z.ZodBoolean>;
24
24
  }, z.core.$strict>>;
@@ -28,30 +28,30 @@ export declare const AgentOverlaySchema: z.ZodObject<{
28
28
  temperature: z.ZodOptional<z.ZodNumber>;
29
29
  top_p: z.ZodOptional<z.ZodNumber>;
30
30
  mode: z.ZodOptional<z.ZodEnum<{
31
- subagent: "subagent";
32
- primary: "primary";
33
31
  all: "all";
32
+ primary: "primary";
33
+ subagent: "subagent";
34
34
  }>>;
35
35
  color: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
36
+ accent: "accent";
37
+ error: "error";
38
+ info: "info";
36
39
  primary: "primary";
37
40
  secondary: "secondary";
38
- accent: "accent";
39
41
  success: "success";
40
42
  warning: "warning";
41
- error: "error";
42
- info: "info";
43
43
  }>, z.ZodString]>>;
44
44
  steps: z.ZodOptional<z.ZodNumber>;
45
45
  hidden: z.ZodOptional<z.ZodBoolean>;
46
46
  disable: z.ZodOptional<z.ZodBoolean>;
47
47
  skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
48
48
  permission: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodEnum<{
49
- ask: "ask";
50
49
  allow: "allow";
50
+ ask: "ask";
51
51
  deny: "deny";
52
52
  }>, z.ZodRecord<z.ZodString, z.ZodEnum<{
53
- ask: "ask";
54
53
  allow: "allow";
54
+ ask: "ask";
55
55
  deny: "deny";
56
56
  }>>]>>>;
57
57
  }, z.core.$strict>;
@@ -61,41 +61,41 @@ export declare const CategoryOverlaySchema: z.ZodObject<{
61
61
  temperature: z.ZodOptional<z.ZodNumber>;
62
62
  top_p: z.ZodOptional<z.ZodNumber>;
63
63
  mode: z.ZodOptional<z.ZodEnum<{
64
- subagent: "subagent";
65
- primary: "primary";
66
64
  all: "all";
65
+ primary: "primary";
66
+ subagent: "subagent";
67
67
  }>>;
68
68
  color: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
69
+ accent: "accent";
70
+ error: "error";
71
+ info: "info";
69
72
  primary: "primary";
70
73
  secondary: "secondary";
71
- accent: "accent";
72
74
  success: "success";
73
75
  warning: "warning";
74
- error: "error";
75
- info: "info";
76
76
  }>, z.ZodString]>>;
77
77
  steps: z.ZodOptional<z.ZodNumber>;
78
78
  hidden: z.ZodOptional<z.ZodBoolean>;
79
79
  skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
80
80
  permission: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodEnum<{
81
- ask: "ask";
82
81
  allow: "allow";
82
+ ask: "ask";
83
83
  deny: "deny";
84
84
  }>, z.ZodRecord<z.ZodString, z.ZodEnum<{
85
- ask: "ask";
86
85
  allow: "allow";
86
+ ask: "ask";
87
87
  deny: "deny";
88
88
  }>>]>>>;
89
89
  }, z.core.$strict>;
90
90
  export declare const PiSubagentsAgentOverlaySchema: z.ZodObject<{
91
91
  thinking: z.ZodOptional<z.ZodEnum<{
92
- off: "off";
93
- minimal: "minimal";
92
+ high: "high";
94
93
  low: "low";
94
+ max: "max";
95
95
  medium: "medium";
96
- high: "high";
96
+ minimal: "minimal";
97
+ off: "off";
97
98
  xhigh: "xhigh";
98
- max: "max";
99
99
  }>>;
100
100
  max_turns: z.ZodOptional<z.ZodNumber>;
101
101
  tools: z.ZodOptional<z.ZodString>;
@@ -103,13 +103,13 @@ export declare const PiSubagentsAgentOverlaySchema: z.ZodObject<{
103
103
  }, z.core.$strict>;
104
104
  export declare const PiSubagentsCategoryOverlaySchema: z.ZodObject<{
105
105
  thinking: z.ZodOptional<z.ZodEnum<{
106
- off: "off";
107
- minimal: "minimal";
106
+ high: "high";
108
107
  low: "low";
108
+ max: "max";
109
109
  medium: "medium";
110
- high: "high";
110
+ minimal: "minimal";
111
+ off: "off";
111
112
  xhigh: "xhigh";
112
- max: "max";
113
113
  }>>;
114
114
  max_turns: z.ZodOptional<z.ZodNumber>;
115
115
  tools: z.ZodOptional<z.ZodString>;
@@ -118,13 +118,13 @@ export declare const PiSubagentsCategoryOverlaySchema: z.ZodObject<{
118
118
  export declare const PiSubagentsSchema: z.ZodDefault<z.ZodObject<{
119
119
  categories: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
120
120
  thinking: z.ZodOptional<z.ZodEnum<{
121
- off: "off";
122
- minimal: "minimal";
121
+ high: "high";
123
122
  low: "low";
123
+ max: "max";
124
124
  medium: "medium";
125
- high: "high";
125
+ minimal: "minimal";
126
+ off: "off";
126
127
  xhigh: "xhigh";
127
- max: "max";
128
128
  }>>;
129
129
  max_turns: z.ZodOptional<z.ZodNumber>;
130
130
  tools: z.ZodOptional<z.ZodString>;
@@ -132,13 +132,13 @@ export declare const PiSubagentsSchema: z.ZodDefault<z.ZodObject<{
132
132
  }, z.core.$strict>>>;
133
133
  agents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
134
134
  thinking: z.ZodOptional<z.ZodEnum<{
135
- off: "off";
136
- minimal: "minimal";
135
+ high: "high";
137
136
  low: "low";
137
+ max: "max";
138
138
  medium: "medium";
139
- high: "high";
139
+ minimal: "minimal";
140
+ off: "off";
140
141
  xhigh: "xhigh";
141
- max: "max";
142
142
  }>>;
143
143
  max_turns: z.ZodOptional<z.ZodNumber>;
144
144
  tools: z.ZodOptional<z.ZodString>;
@@ -64,10 +64,10 @@ export interface LoadConfigOptions {
64
64
  export declare function loadConfig(projectDir: string, options?: LoadConfigOptions): SystematicConfig;
65
65
  export declare function loadConfigWithSources(projectDir: string, options?: LoadConfigOptions): SourceAwareConfigResult;
66
66
  export declare function getConfigPaths(projectDir: string): {
67
- customConfig?: string | undefined;
68
- customDir?: string | undefined;
69
67
  userConfig: string;
70
68
  projectConfig: string;
71
69
  userDir: string;
72
70
  projectDir: string;
71
+ customConfig?: string | undefined;
72
+ customDir?: string | undefined;
73
73
  };
@@ -5,7 +5,7 @@ import { type AgentCatalogEntry } from './agent-resolver.js';
5
5
  /** Fixed, non-configurable delegation bounds (LOCKED). */
6
6
  export declare const MAX_DELEGATE_TURNS = 20;
7
7
  export declare const DELEGATE_TOOL_NAME = "systematic_delegate";
8
- export declare const DELEGATE_EXECUTION_MODE: "sequential";
8
+ export declare const DELEGATE_EXECUTION_MODE: 'sequential';
9
9
  export type DelegateOutcome = 'completed' | 'turn_limit' | 'aborted' | 'failed';
10
10
  /** The parent session's model, narrowed to always-defined (validated before use). */
11
11
  export type DelegateParentModel = NonNullable<ExtensionContext['model']>;
@@ -1,4 +1,4 @@
1
- export declare const CANONICAL_QUESTION_WORDING: "Confirm the requested guarded transition.";
1
+ export declare const CANONICAL_QUESTION_WORDING: 'Confirm the requested guarded transition.';
2
2
  export type QuestionPurpose = 'transition' | 'session-disablement';
3
3
  export type QuestionAnswerClassification = 'affirmative' | 'non-affirmative';
4
4
  export type QuestionAttestationReasonCode = 'already-bound' | 'already-consumed' | 'already-disabled' | 'call-session-mismatch' | 'challenge-expired' | 'challenge-consumed' | 'invalid-input' | 'no-attestation' | 'non-affirmative' | 'rejected' | 'replay' | 'scope-mismatch' | 'substitution' | 'unknown-challenge' | 'unknown-request';
@@ -28,7 +28,7 @@ export interface SkillInfo {
28
28
  argumentHint?: string;
29
29
  allowedTools?: string;
30
30
  }
31
- export declare const SKILL_FRONTMATTER_FIELDS: readonly ["name", "description", "argument-hint", "disable-model-invocation", "allowed-tools", "license", "compatibility", "metadata", "user-invocable", "agent", "model", "context", "subtask"];
31
+ export declare const SKILL_FRONTMATTER_FIELDS: readonly ['name', 'description', 'argument-hint', 'disable-model-invocation', 'allowed-tools', 'license', 'compatibility', 'metadata', 'user-invocable', 'agent', 'model', 'context', 'subtask'];
32
32
  /**
33
33
  * Parse skill frontmatter from already-read file content. Split out from
34
34
  * `extractFrontmatter` so callers that also need the body (e.g. discovered-skill
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fro.bot/systematic",
3
- "version": "3.5.3",
3
+ "version": "3.5.4",
4
4
  "description": "Compound-engineering loops for OpenCode, Pi, and Claude Code",
5
5
  "type": "module",
6
6
  "homepage": "https://fro.bot/systematic",
@@ -99,7 +99,7 @@
99
99
  "@tintinweb/pi-subagents": "0.14.3",
100
100
  "@types/bun": "latest",
101
101
  "@types/js-yaml": "4.0.9",
102
- "@types/node": "24.13.3",
102
+ "@types/node": "26.1.2",
103
103
  "agent-browser": "0.33.1",
104
104
  "ajv": "8.20.0",
105
105
  "ajv-formats": "3.0.1",
@@ -109,7 +109,7 @@
109
109
  "semantic-release": "25.0.8",
110
110
  "semantic-release-export-data": "1.2.0",
111
111
  "typebox": "1.3.8",
112
- "typescript": "6.0.3"
112
+ "typescript": "7.0.2"
113
113
  },
114
114
  "dependencies": {
115
115
  "js-yaml": "^4.1.1",
@@ -113,3 +113,5 @@ The four capabilities are subagent delegation, blocking user interaction, task t
113
113
  The bootstrap inlines the active harness profile naming the exact mechanisms for this session—consult it.
114
114
 
115
115
  When a mechanism is unavailable, present numbered options in chat and wait for questions, maintain a visible list for task tracking, and dispatch delegation sequentially or do the work inline.
116
+
117
+ Check the workflow guard availability once per execution unit. If the guard reports `unavailable` or `guard-unavailable`, treat it as terminal for that unit: do not retry `systematic_workflow_start` or `systematic_workflow_complete`. Use the documented unguarded fallback only when authorized, and report the unavailable state once.