@fro.bot/systematic 2.33.2 → 3.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/ATTRIBUTIONS.md +1 -1
- package/agents/design/design-iterator.md +1 -0
- package/agents/research/best-practices-researcher.md +6 -8
- package/agents/review/pattern-recognition-specialist.md +1 -1
- package/agents/workflow/systematic-implementer.md +1 -0
- package/dist/cli.js +348 -53
- package/dist/{index-vyzhzvap.js → index-yskzf7vh.js} +587 -386
- package/dist/index.js +100 -155
- package/dist/lib/agent-overlays.d.ts +0 -1
- package/dist/lib/agent-resolver.d.ts +28 -0
- package/dist/lib/bootstrap.d.ts +8 -1
- package/dist/lib/bundled-names.d.ts +3 -3
- package/dist/lib/pi-delegate-session.d.ts +31 -0
- package/dist/lib/pi-delegate-tool.d.ts +42 -0
- package/dist/lib/removed-names.d.ts +3 -3
- package/dist/lib/setup.d.ts +36 -0
- package/dist/lib/skill-loader.d.ts +1 -2
- package/dist/lib/skill-resolver.d.ts +39 -0
- package/dist/lib/skill-tool.d.ts +2 -11
- package/dist/lib/skills.d.ts +1 -9
- package/dist/lib/source-model-defaults.d.ts +1 -1
- package/dist/pi.d.ts +7 -0
- package/dist/pi.js +3641 -0
- package/dist/schemas/systematic-config.schema.json +47 -242
- package/package.json +31 -8
- package/skills/ce-brainstorm/references/handoff.md +5 -26
- package/skills/ce-brainstorm/references/universal-brainstorming.md +0 -1
- package/skills/ce-compound/SKILL.md +8 -12
- package/skills/ce-ideate/references/post-ideation-workflow.md +21 -85
- package/skills/ce-plan/SKILL.md +6 -6
- package/skills/ce-plan/references/deepening-workflow.md +6 -7
- package/skills/ce-plan/references/plan-handoff.md +1 -17
- package/skills/ce-plan/references/universal-planning.md +0 -4
- package/skills/ce-review/SKILL.md +10 -19
- package/skills/ce-review/references/persona-catalog.md +2 -7
- package/skills/ce-review/references/review-output-template.md +0 -1
- package/skills/ce-work/SKILL.md +1 -1
- package/skills/deepen-plan/SKILL.md +6 -7
- package/skills/document-review/SKILL.md +2 -2
- package/skills/git-commit-push-pr/SKILL.md +1 -2
- package/skills/lfg/SKILL.md +1 -1
- package/skills/onboarding/SKILL.md +1 -12
- package/skills/orchestrating-subagents/SKILL.md +2 -2
- package/skills/slfg/SKILL.md +2 -3
- package/skills/test-browser/SKILL.md +2 -2
- package/skills/todos/SKILL.md +239 -0
- package/skills/writing-skills/SKILL.md +102 -1
- package/skills/{writing-systematic-skills → writing-skills}/references/foundation-conventions.md +5 -5
- package/agents/design/design-implementation-reviewer.md +0 -95
- package/agents/design/figma-design-sync.md +0 -173
- package/agents/docs/ankane-readme-writer.md +0 -51
- package/agents/review/cli-agent-readiness-reviewer.md +0 -418
- package/agents/review/data-integrity-guardian.md +0 -72
- package/agents/review/data-migration-expert.md +0 -99
- package/agents/review/dhh-rails-reviewer.md +0 -46
- package/agents/review/julik-frontend-races-reviewer.md +0 -49
- package/agents/review/kieran-python-reviewer.md +0 -47
- package/agents/review/kieran-rails-reviewer.md +0 -47
- package/agents/review/performance-oracle.md +0 -112
- package/agents/review/schema-drift-detector.md +0 -143
- package/agents/review/security-sentinel.md +0 -95
- package/agents/workflow/lint.md +0 -17
- package/dist/lib/converter.d.ts +0 -14
- package/skills/andrew-kane-gem-writer/SKILL.md +0 -184
- package/skills/andrew-kane-gem-writer/references/database-adapters.md +0 -231
- package/skills/andrew-kane-gem-writer/references/module-organization.md +0 -121
- package/skills/andrew-kane-gem-writer/references/rails-integration.md +0 -183
- package/skills/andrew-kane-gem-writer/references/resources.md +0 -119
- package/skills/andrew-kane-gem-writer/references/testing-patterns.md +0 -261
- package/skills/changelog/SKILL.md +0 -139
- package/skills/claude-permissions-optimizer/SKILL.md +0 -166
- package/skills/claude-permissions-optimizer/scripts/extract-commands.mjs +0 -655
- package/skills/claude-permissions-optimizer/scripts/normalize.mjs +0 -151
- package/skills/dhh-rails-style/SKILL.md +0 -186
- package/skills/dhh-rails-style/references/architecture.md +0 -653
- package/skills/dhh-rails-style/references/controllers.md +0 -303
- package/skills/dhh-rails-style/references/frontend.md +0 -510
- package/skills/dhh-rails-style/references/gems.md +0 -266
- package/skills/dhh-rails-style/references/models.md +0 -359
- package/skills/dhh-rails-style/references/testing.md +0 -338
- package/skills/dspy-ruby/SKILL.md +0 -737
- package/skills/dspy-ruby/assets/config-template.rb +0 -187
- package/skills/dspy-ruby/assets/module-template.rb +0 -300
- package/skills/dspy-ruby/assets/signature-template.rb +0 -221
- package/skills/dspy-ruby/references/core-concepts.md +0 -674
- package/skills/dspy-ruby/references/observability.md +0 -366
- package/skills/dspy-ruby/references/optimization.md +0 -603
- package/skills/dspy-ruby/references/providers.md +0 -418
- package/skills/dspy-ruby/references/toolsets.md +0 -502
- package/skills/every-style-editor/SKILL.md +0 -135
- package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +0 -529
- package/skills/feature-video/SKILL.md +0 -383
- package/skills/gemini-imagegen/SKILL.md +0 -237
- package/skills/gemini-imagegen/requirements.txt +0 -2
- package/skills/gemini-imagegen/scripts/compose_images.py +0 -157
- package/skills/gemini-imagegen/scripts/edit_image.py +0 -144
- package/skills/gemini-imagegen/scripts/gemini_images.py +0 -263
- package/skills/gemini-imagegen/scripts/generate_image.py +0 -133
- package/skills/gemini-imagegen/scripts/multi_turn_chat.py +0 -216
- package/skills/generate_command/SKILL.md +0 -164
- package/skills/orchestrating-swarms/SKILL.md +0 -1723
- package/skills/proof/SKILL.md +0 -291
- package/skills/proof/references/hitl-review.md +0 -368
- package/skills/rclone/SKILL.md +0 -150
- package/skills/rclone/scripts/check_setup.sh +0 -60
- package/skills/setup/SKILL.md +0 -22
- package/skills/test-xcode/SKILL.md +0 -214
- package/skills/todo-create/SKILL.md +0 -109
- package/skills/todo-resolve/SKILL.md +0 -68
- package/skills/todo-triage/SKILL.md +0 -70
- package/skills/writing-systematic-skills/SKILL.md +0 -119
- /package/skills/{todo-create → todos}/assets/todo-template.md +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
/** The one package identity this module knows how to configure (literal check, not a resolver). */
|
|
3
|
+
export declare const SYSTEMATIC_PACKAGE_NAME = "@fro.bot/systematic";
|
|
4
|
+
/** The exact string written into a fresh Pi `packages` array entry. */
|
|
5
|
+
export declare const PI_PACKAGE_IDENTIFIER = "npm:@fro.bot/systematic";
|
|
6
|
+
export type Harness = 'opencode' | 'pi';
|
|
7
|
+
/** Discriminated result: exactly one of these two states, never a boolean pair. */
|
|
8
|
+
export type SetupResult = {
|
|
9
|
+
status: 'configured';
|
|
10
|
+
targetPath: string;
|
|
11
|
+
} | {
|
|
12
|
+
status: 'already-configured';
|
|
13
|
+
targetPath: string;
|
|
14
|
+
};
|
|
15
|
+
/** Type guard for errors raised by `createSetupError`. */
|
|
16
|
+
export declare function isSetupError(error: unknown): error is Error;
|
|
17
|
+
/**
|
|
18
|
+
* Narrow filesystem seam for injecting failures (e.g. a broken `renameSync`)
|
|
19
|
+
* in tests. Default implementation is real `node:fs`.
|
|
20
|
+
*/
|
|
21
|
+
export interface SetupFsOps {
|
|
22
|
+
writeFileSync: typeof fs.writeFileSync;
|
|
23
|
+
renameSync: typeof fs.renameSync;
|
|
24
|
+
unlinkSync: typeof fs.unlinkSync;
|
|
25
|
+
chmodSync: typeof fs.chmodSync;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Configures the given harness's project-local config to load
|
|
29
|
+
* `@fro.bot/systematic`. Project-local only -- no `--global` mode. Writes
|
|
30
|
+
* are atomic, backed-up on real mutation, idempotent, and isolated per
|
|
31
|
+
* harness (setting up one never touches the other's config file).
|
|
32
|
+
*
|
|
33
|
+
* `opsOverride` is an injectable filesystem seam for tests exercising
|
|
34
|
+
* failure/cleanup paths; production callers should omit it.
|
|
35
|
+
*/
|
|
36
|
+
export declare function setupHarness(harness: Harness, cwd: string, opsOverride?: Partial<SetupFsOps>): SetupResult;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SkillInfo } from './skills.js';
|
|
2
2
|
export interface LoadedSkill {
|
|
3
3
|
name: string;
|
|
4
4
|
prefixedName: string;
|
|
@@ -12,7 +12,6 @@ export interface LoadedSkill {
|
|
|
12
12
|
agent?: string;
|
|
13
13
|
model?: string;
|
|
14
14
|
argumentHint?: string;
|
|
15
|
-
deprecated?: SkillDeprecated;
|
|
16
15
|
}
|
|
17
16
|
export declare function formatSkillCommandName(name: string): string;
|
|
18
17
|
export declare function formatSkillDescription(description: string, fallbackName: string): string;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type LoadedSkill } from './skill-loader.js';
|
|
2
|
+
/**
|
|
3
|
+
* Harness-neutral options shared by every adapter (OpenCode, Pi, ...).
|
|
4
|
+
*/
|
|
5
|
+
export interface SkillResolverOptions {
|
|
6
|
+
bundledSkillsDir: string;
|
|
7
|
+
disabledSkills: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolves a requested skill name (with or without the `systematic:` prefix)
|
|
11
|
+
* against the bundled skill catalog. Throws the same not-found error text
|
|
12
|
+
* regardless of the calling harness.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveSkill(options: SkillResolverOptions, requestedName: string): LoadedSkill;
|
|
15
|
+
/**
|
|
16
|
+
* Deterministic, catalog-derived tool description shared by every harness.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildSkillToolDescription(options: SkillResolverOptions): string;
|
|
19
|
+
/**
|
|
20
|
+
* Deterministic, catalog-derived parameter hint shared by every harness.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildSkillToolParameterHint(options: SkillResolverOptions): string;
|
|
23
|
+
/**
|
|
24
|
+
* Builds the exact `<skill_content>`-wrapped output shared by every harness.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildSkillContentOutput(matchedSkill: LoadedSkill): {
|
|
27
|
+
output: string;
|
|
28
|
+
dir: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Discovers skill files in a directory and formats them as XML tags.
|
|
32
|
+
* Recursively searches subdirectories, includes hidden files, excludes .git and SKILL.md.
|
|
33
|
+
* Matches OpenCode v1.1.50 behavior exactly.
|
|
34
|
+
*
|
|
35
|
+
* @param dir - Directory path to search for skill files
|
|
36
|
+
* @param limit - Maximum number of files to return (default: 10)
|
|
37
|
+
* @returns String with absolute file paths formatted as XML tags, one per line
|
|
38
|
+
*/
|
|
39
|
+
export declare function discoverSkillFiles(dir: string, limit?: number): string;
|
package/dist/lib/skill-tool.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ToolDefinition } from '@opencode-ai/plugin';
|
|
2
|
-
import {
|
|
2
|
+
import type { SkillInfo } from './skills.js';
|
|
3
|
+
export { discoverSkillFiles } from './skill-resolver.js';
|
|
3
4
|
export interface SkillToolOptions {
|
|
4
5
|
bundledSkillsDir: string;
|
|
5
6
|
disabledSkills: string[];
|
|
@@ -9,14 +10,4 @@ export interface SkillToolOptions {
|
|
|
9
10
|
* Uses indented format matching OpenCode's native skill tool.
|
|
10
11
|
*/
|
|
11
12
|
export declare function formatSkillsXml(skills: SkillInfo[]): string;
|
|
12
|
-
/**
|
|
13
|
-
* Discovers skill files in a directory and formats them as XML tags.
|
|
14
|
-
* Recursively searches subdirectories, includes hidden files, excludes .git and SKILL.md.
|
|
15
|
-
* Matches OpenCode v1.1.50 behavior exactly.
|
|
16
|
-
*
|
|
17
|
-
* @param dir - Directory path to search for skill files
|
|
18
|
-
* @param limit - Maximum number of files to return (default: 10)
|
|
19
|
-
* @returns String with absolute file paths formatted as XML tags, one per line
|
|
20
|
-
*/
|
|
21
|
-
export declare function discoverSkillFiles(dir: string, limit?: number): string;
|
|
22
13
|
export declare function createSkillTool(options: SkillToolOptions): ToolDefinition;
|
package/dist/lib/skills.d.ts
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
export interface SkillDeprecated {
|
|
2
|
-
since: string;
|
|
3
|
-
removal: string;
|
|
4
|
-
replacement?: string;
|
|
5
|
-
reason?: string;
|
|
6
|
-
}
|
|
7
1
|
export interface SkillFrontmatter {
|
|
8
2
|
name: string;
|
|
9
3
|
description: string;
|
|
10
4
|
license?: string;
|
|
11
5
|
compatibility?: string;
|
|
12
6
|
metadata?: Record<string, string>;
|
|
13
|
-
deprecated?: SkillDeprecated;
|
|
14
7
|
disableModelInvocation?: boolean;
|
|
15
8
|
userInvocable?: boolean;
|
|
16
9
|
subtask?: boolean;
|
|
@@ -27,7 +20,6 @@ export interface SkillInfo {
|
|
|
27
20
|
license?: string;
|
|
28
21
|
compatibility?: string;
|
|
29
22
|
metadata?: Record<string, string>;
|
|
30
|
-
deprecated?: SkillDeprecated;
|
|
31
23
|
disableModelInvocation?: boolean;
|
|
32
24
|
userInvocable?: boolean;
|
|
33
25
|
subtask?: boolean;
|
|
@@ -36,7 +28,7 @@ export interface SkillInfo {
|
|
|
36
28
|
argumentHint?: string;
|
|
37
29
|
allowedTools?: string;
|
|
38
30
|
}
|
|
39
|
-
export declare const SKILL_FRONTMATTER_FIELDS: readonly ["name", "description", "argument-hint", "disable-model-invocation", "allowed-tools", "license", "compatibility", "metadata", "
|
|
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"];
|
|
40
32
|
/**
|
|
41
33
|
* Parse skill frontmatter from already-read file content. Split out from
|
|
42
34
|
* `extractFrontmatter` so callers that also need the body (e.g. discovered-skill
|
|
@@ -74,7 +74,7 @@ export interface CategoryDefault {
|
|
|
74
74
|
}
|
|
75
75
|
export type SourceCategoryDefaults = Record<string, CategoryDefault>;
|
|
76
76
|
/**
|
|
77
|
-
* Provider-grouped source model defaults for the
|
|
77
|
+
* Provider-grouped source model defaults for the 5 Systematic agent categories.
|
|
78
78
|
*
|
|
79
79
|
* Provider chains are ordered by OMO category-fit reasoning. The resolver
|
|
80
80
|
* walks providers in order and picks the first available provider/model pair.
|
package/dist/pi.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ExtensionAPI } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
import { buildAgentCatalog } from './lib/agent-resolver.js';
|
|
3
|
+
type PiExtensionDependencies = {
|
|
4
|
+
buildAgentCatalog?: typeof buildAgentCatalog;
|
|
5
|
+
};
|
|
6
|
+
export default function systematicPiExtension(pi: ExtensionAPI, deps?: PiExtensionDependencies): Promise<void>;
|
|
7
|
+
export {};
|