@fro.bot/systematic 3.5.3 → 3.5.5
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/dist/lib/agent-colors.d.ts +1 -1
- package/dist/lib/agent-resolver.d.ts +1 -1
- package/dist/lib/bundled-names.d.ts +3 -3
- package/dist/lib/config-schema.d.ts +31 -31
- package/dist/lib/config.d.ts +2 -2
- package/dist/lib/pi-delegate-tool.d.ts +1 -1
- package/dist/lib/question-attestation.d.ts +1 -1
- package/dist/lib/skills.d.ts +1 -1
- package/package.json +3 -3
- package/skills/ce-review/references/subagent-template.md +4 -0
- package/skills/using-systematic/SKILL.md +2 -0
|
@@ -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 [
|
|
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 [
|
|
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 [
|
|
2
|
-
export declare const BUNDLED_AGENT_QUALIFIED_IDS: readonly [
|
|
3
|
-
export declare const BUNDLED_SKILL_NAMES: readonly [
|
|
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
|
-
|
|
93
|
-
minimal: "minimal";
|
|
92
|
+
high: "high";
|
|
94
93
|
low: "low";
|
|
94
|
+
max: "max";
|
|
95
95
|
medium: "medium";
|
|
96
|
-
|
|
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
|
-
|
|
107
|
-
minimal: "minimal";
|
|
106
|
+
high: "high";
|
|
108
107
|
low: "low";
|
|
108
|
+
max: "max";
|
|
109
109
|
medium: "medium";
|
|
110
|
-
|
|
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
|
-
|
|
122
|
-
minimal: "minimal";
|
|
121
|
+
high: "high";
|
|
123
122
|
low: "low";
|
|
123
|
+
max: "max";
|
|
124
124
|
medium: "medium";
|
|
125
|
-
|
|
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
|
-
|
|
136
|
-
minimal: "minimal";
|
|
135
|
+
high: "high";
|
|
137
136
|
low: "low";
|
|
137
|
+
max: "max";
|
|
138
138
|
medium: "medium";
|
|
139
|
-
|
|
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>;
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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';
|
package/dist/lib/skills.d.ts
CHANGED
|
@@ -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 [
|
|
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
|
+
"version": "3.5.5",
|
|
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": "
|
|
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": "
|
|
112
|
+
"typescript": "7.0.2"
|
|
113
113
|
},
|
|
114
114
|
"dependencies": {
|
|
115
115
|
"js-yaml": "^4.1.1",
|
|
@@ -17,6 +17,10 @@ You are a specialist code reviewer.
|
|
|
17
17
|
{diff_scope_rules}
|
|
18
18
|
</scope-rules>
|
|
19
19
|
|
|
20
|
+
<bounded-investigation>
|
|
21
|
+
The supplied diff is the primary source of truth. Use the supplied paths and line numbers, and read each unresolved surrounding range or symbol once. Re-read only when a concrete ambiguity remains or the file changed since the prior read. Stop and return a finding or verdict once the evidence is sufficient. If evidence cannot be obtained within this bounded pass, return an explicit blocker or residual risk instead of broadening the investigation indefinitely.
|
|
22
|
+
</bounded-investigation>
|
|
23
|
+
|
|
20
24
|
<output-contract>
|
|
21
25
|
You produce up to two outputs depending on whether a run ID was provided:
|
|
22
26
|
|
|
@@ -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.
|