@wrongstack/core 0.89.3 → 0.104.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/dist/{agent-bridge-DbVe1dHT.d.ts → agent-bridge-mOxbpFcg.d.ts} +1 -1
- package/dist/{agent-subagent-runner-C6eqID1t.d.ts → agent-subagent-runner-DukQLUcS.d.ts} +5 -5
- package/dist/{brain-s9DyD_Vf.d.ts → brain-Dfv4Y82E.d.ts} +1 -1
- package/dist/{config-84VaZpH6.d.ts → config-BSU-6vah.d.ts} +1 -1
- package/dist/coordination/index.d.ts +9 -9
- package/dist/coordination/index.js +103 -0
- package/dist/coordination/index.js.map +1 -1
- package/dist/defaults/index.d.ts +18 -17
- package/dist/defaults/index.js +276 -12
- package/dist/defaults/index.js.map +1 -1
- package/dist/execution/index.d.ts +61 -365
- package/dist/execution/index.js +423 -8
- package/dist/execution/index.js.map +1 -1
- package/dist/extension/index.d.ts +4 -4
- package/dist/goal-preamble-CI8lxeY1.d.ts +378 -0
- package/dist/{goal-store-DvWLNu52.d.ts → goal-store-ht0VmR1A.d.ts} +63 -21
- package/dist/{index-CqrroYcU.d.ts → index-BWRN6wOb.d.ts} +5 -5
- package/dist/{index-D3Nax3YU.d.ts → index-DIKEcfgC.d.ts} +3 -3
- package/dist/index.d.ts +31 -29
- package/dist/index.js +530 -53
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/index.d.ts +4 -4
- package/dist/kernel/index.d.ts +6 -6
- package/dist/{mcp-servers-D3E5ixAR.d.ts → mcp-servers-CXCsANdY.d.ts} +1 -1
- package/dist/{multi-agent-coordinator-DHNrjPaA.d.ts → multi-agent-coordinator-51LvnXkD.d.ts} +1 -1
- package/dist/{null-fleet-bus-BzzciAc4.d.ts → null-fleet-bus-D09hMzFQ.d.ts} +5 -5
- package/dist/observability/index.d.ts +1 -1
- package/dist/{parallel-eternal-engine-CTpcrb9O.d.ts → parallel-eternal-engine-CUtmM_0V.d.ts} +24 -5
- package/dist/{path-resolver-B7hgMAVe.d.ts → path-resolver-DDJiMAtX.d.ts} +1 -1
- package/dist/{pipeline-C1Ad9OjI.d.ts → pipeline-BqiA_UMr.d.ts} +2 -2
- package/dist/{plan-templates-CNphsz0n.d.ts → plan-templates-BdDxl9cI.d.ts} +2 -2
- package/dist/{provider-runner-cqvlB_oS.d.ts → provider-runner-BUunikwY.d.ts} +1 -1
- package/dist/sdd/index.d.ts +11 -6
- package/dist/sdd/index.js +124 -5
- package/dist/sdd/index.js.map +1 -1
- package/dist/{session-event-bridge-IVzs2GpE.d.ts → session-event-bridge-BpJ5trO9.d.ts} +1 -1
- package/dist/{skill-BJxzIyyN.d.ts → skill-Bj6Ezqb8.d.ts} +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/spec-TBi3Jr6T.d.ts +78 -0
- package/dist/storage/index.d.ts +21 -9
- package/dist/storage/index.js +157 -14
- package/dist/storage/index.js.map +1 -1
- package/dist/task-format-vGOIftmK.d.ts +23 -0
- package/dist/task-graph-u1q9Jkyk.d.ts +84 -0
- package/dist/types/index.d.ts +15 -14
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.js +110 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/tech-stack/SKILL.md +177 -0
- package/dist/task-graph-DJBqO0EY.d.ts +0 -161
package/package.json
CHANGED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tech-stack
|
|
3
|
+
description: |
|
|
4
|
+
Use this skill when choosing, installing, or recommending packages, libraries,
|
|
5
|
+
frameworks, or tooling — any decision that involves a version number or a
|
|
6
|
+
technology name. This skill enforces latest-version verification, blocks
|
|
7
|
+
dead/obsolete choices, and intervenes when the LLM hallucinates version
|
|
8
|
+
numbers or suggests 5+ year-old technology.
|
|
9
|
+
Triggers: user says "install", "package", "dependency", "upgrade",
|
|
10
|
+
"latest version", "add package", "npm install", "pnpm add", "what version",
|
|
11
|
+
"which library", "tech stack", "choose framework".
|
|
12
|
+
version: 1.0.0
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Tech Stack Validator — WrongStack
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Intervening validation layer that fires before a package, library, or framework
|
|
20
|
+
choice is committed. Verifies that the selected technology and version are
|
|
21
|
+
current, exist in reality, and are not dead/abandoned. Runs as a single-shot
|
|
22
|
+
delegate — fast, read-only, fire-and-forget.
|
|
23
|
+
|
|
24
|
+
## Rules
|
|
25
|
+
|
|
26
|
+
1. **Verify existence.** Before accepting a package name, search the npm registry
|
|
27
|
+
(`https://registry.npmjs.org/<package>/latest`) or the equivalent package
|
|
28
|
+
index. A package that doesn't exist in the registry is a hallucination.
|
|
29
|
+
|
|
30
|
+
2. **Check latest version.** Always fetch the actual latest stable version.
|
|
31
|
+
The LLM's training data is stale — never trust a version number from the
|
|
32
|
+
model without checking.
|
|
33
|
+
|
|
34
|
+
3. **Reject dead packages.** If a package has had no release in >2 years AND
|
|
35
|
+
has unresolved critical issues, flag it as dead. Suggest a maintained
|
|
36
|
+
replacement.
|
|
37
|
+
|
|
38
|
+
4. **Reject prehistoric technology.** Any package/library/pattern that was
|
|
39
|
+
superseded ≥5 years ago is automatically rejected. Examples that MUST be
|
|
40
|
+
blocked:
|
|
41
|
+
- `axios`, `node-fetch`, `got` → native `fetch` (Node 18+, 2022)
|
|
42
|
+
- `request` (deprecated 2020) → native `fetch`
|
|
43
|
+
- `moment` → `date-fns`, `luxon`, or `Temporal`
|
|
44
|
+
- `left-pad` → native `String.prototype.padStart`
|
|
45
|
+
- `crypto-js` → native `Web Crypto` / `node:crypto`
|
|
46
|
+
- `jQuery` for new projects → vanilla DOM / React
|
|
47
|
+
- `Backbone`, `Ember` → React / Vue / Svelte
|
|
48
|
+
- `Gulp`, `Grunt` → `tsup`, `esbuild`, `vite`
|
|
49
|
+
- `Bower` → npm/pnpm
|
|
50
|
+
- `CoffeeScript` → TypeScript
|
|
51
|
+
- `Flow` → TypeScript
|
|
52
|
+
- `Bluebird` → native Promises
|
|
53
|
+
- `underscore` → `lodash` or native ES2020+
|
|
54
|
+
- `classnames` → `clsx` or native `classList`
|
|
55
|
+
|
|
56
|
+
5. **Intervene with evidence.** When blocking a choice, output the exact phrase
|
|
57
|
+
**"This isn't code, this is X-year-old technology"** with:
|
|
58
|
+
- The actual age (X = current year − release year)
|
|
59
|
+
- What superseded it
|
|
60
|
+
- A concrete migration path (one package, one import change)
|
|
61
|
+
|
|
62
|
+
6. **Prefer built-in over third-party.** Every Node.js LTS release adds native
|
|
63
|
+
APIs that obsolete packages. Check Node 22+ built-ins before suggesting an
|
|
64
|
+
npm package:
|
|
65
|
+
- `node:test` over `jest`/`mocha` (for new projects)
|
|
66
|
+
- `node:sqlite` over `better-sqlite3` (Node 22.5+)
|
|
67
|
+
- `fetch`, `WebSocket`, `Web Crypto`, `AbortController`, `EventTarget` —
|
|
68
|
+
all native, no packages needed
|
|
69
|
+
|
|
70
|
+
7. **Single-shot budget.** This agent is not for deep analysis — it should
|
|
71
|
+
complete in 1–2 iterations. Search → verify → report. Do not recursively
|
|
72
|
+
analyze transitive dependencies.
|
|
73
|
+
|
|
74
|
+
## Patterns
|
|
75
|
+
|
|
76
|
+
### Do
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
User: "Add axios for API calls"
|
|
80
|
+
Agent: ❌ REJECTED
|
|
81
|
+
"This isn't code, this is 10-year-old technology."
|
|
82
|
+
axios was released in 2014. Node.js 18+ (2022) includes native fetch with
|
|
83
|
+
AbortSignal.timeout(), streaming, and FormData. No package needed.
|
|
84
|
+
→ Use: `const res = await fetch(url, { signal: AbortSignal.timeout(5000) })`
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
User: "What version of React should we use?"
|
|
89
|
+
Agent: ✅ React 19.2.1 (latest stable as of 2026-06-08)
|
|
90
|
+
Verified via npm registry. React 19 includes Server Components,
|
|
91
|
+
use() hook, and ref-as-prop. Pin to ^19.2.0 for semver safety.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
User: "Install typescript"
|
|
96
|
+
Agent: ✅ TypeScript 5.9.3 (latest stable)
|
|
97
|
+
Verified via npm registry. Use `^5.9.0` to receive patch updates.
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Don't
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
// ❌ Trusting the LLM's stale training data
|
|
104
|
+
Agent: "Use React 18.3.1 — it's the latest stable."
|
|
105
|
+
// WRONG — React 19 has been stable since Dec 2024. Check npm.
|
|
106
|
+
|
|
107
|
+
// ❌ Suggesting axios without challenge
|
|
108
|
+
Agent: "npm install axios" — no justification, no fetch alternative mentioned.
|
|
109
|
+
|
|
110
|
+
// ❌ Accepting a package that doesn't exist
|
|
111
|
+
Agent: "Install @anthropic/sdk version 2.0.0" — verify this version exists first.
|
|
112
|
+
|
|
113
|
+
// ❌ Suggesting moment.js
|
|
114
|
+
Agent: "Use moment for date formatting" — moment is legacy. Suggest date-fns or Temporal.
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Workflow
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
1. Receive — Package name + proposed version (or "latest")
|
|
121
|
+
2. Search — npm registry: https://registry.npmjs.org/<pkg>/latest
|
|
122
|
+
OR web search: "<package> latest version npm 2026"
|
|
123
|
+
3. Verify — Does the package exist? Is the version real?
|
|
124
|
+
4. Audit — Age check. Last release date > 2 years? Dead?
|
|
125
|
+
Prehistoric check. Was it superseded ≥5 years ago?
|
|
126
|
+
5. Report — APPROVED (with latest version) or REJECTED (with replacement)
|
|
127
|
+
Use the exact phrase "This isn't code, this is X-year-old technology"
|
|
128
|
+
when rejecting on age grounds.
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Version checking — web sources
|
|
132
|
+
|
|
133
|
+
When checking a package version, search in this order:
|
|
134
|
+
1. **npm registry**: `fetch('https://registry.npmjs.org/<package>/latest')` → `version` field
|
|
135
|
+
2. **npm API**: `fetch('https://api.npmjs.org/versions/<package>/last-week')`
|
|
136
|
+
3. **Web search**: `"<package> latest version 2026 npm"` on DuckDuckGo/Google
|
|
137
|
+
4. **GitHub releases**: `fetch('https://api.github.com/repos/<owner>/<repo>/releases/latest')`
|
|
138
|
+
|
|
139
|
+
## Dead package criteria
|
|
140
|
+
|
|
141
|
+
| Signal | Threshold | Action |
|
|
142
|
+
|--------|-----------|--------|
|
|
143
|
+
| No release | >2 years | Flag + check for replacement |
|
|
144
|
+
| No release + critical CVEs | >1 year | REJECT automatically |
|
|
145
|
+
| Deprecated on npm | Any | REJECT + suggest replacement |
|
|
146
|
+
| Repository archived | Any | REJECT + suggest replacement |
|
|
147
|
+
| <100 weekly downloads | Any | WARN + suggest more popular alternative |
|
|
148
|
+
|
|
149
|
+
## Output format
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
### Tech Stack Validation — <package>
|
|
153
|
+
|
|
154
|
+
**Status**: APPROVED | REJECTED | NEEDS_INVESTIGATION
|
|
155
|
+
|
|
156
|
+
**Package**: <name>@<version>
|
|
157
|
+
**Source**: <npm registry / GitHub / web search — cite the URL>
|
|
158
|
+
**Age**: <first release year> — <last release date>
|
|
159
|
+
**Verdict**: 1–2 sentence explanation.
|
|
160
|
+
|
|
161
|
+
When REJECTED:
|
|
162
|
+
**"This isn't code, this is X-year-old technology."**
|
|
163
|
+
**Replaced by**: <modern alternative>
|
|
164
|
+
**Migration**: <one concrete step>
|
|
165
|
+
|
|
166
|
+
When APPROVED:
|
|
167
|
+
**Install**: `pnpm add <name>@^<major>.<minor>.0`
|
|
168
|
+
**Note**: <any caveats about the version>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Skills in scope
|
|
172
|
+
|
|
173
|
+
- `node-modern` — for Node.js built-in vs. third-party decisions
|
|
174
|
+
- `react-modern` — for React version checks
|
|
175
|
+
- `typescript-strict` — for TypeScript version alignment
|
|
176
|
+
- `security-scanner` — for packages with known CVEs
|
|
177
|
+
- `docker-deploy` — for base image version pinning
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
type SpecStatus = 'draft' | 'review' | 'approved' | 'implemented' | 'deprecated';
|
|
2
|
-
type SpecSectionType = 'overview' | 'requirements' | 'architecture' | 'api' | 'data' | 'security' | 'acceptance';
|
|
3
|
-
interface SpecSection {
|
|
4
|
-
type: SpecSectionType;
|
|
5
|
-
title: string;
|
|
6
|
-
content: string;
|
|
7
|
-
level: number;
|
|
8
|
-
children?: SpecSection[] | undefined;
|
|
9
|
-
}
|
|
10
|
-
interface SpecRequirement {
|
|
11
|
-
id: string;
|
|
12
|
-
type: 'functional' | 'non-functional' | 'security' | 'performance' | 'ux';
|
|
13
|
-
priority: 'critical' | 'high' | 'medium' | 'low';
|
|
14
|
-
description: string;
|
|
15
|
-
acceptanceCriteria: string[];
|
|
16
|
-
blockedBy?: string[] | undefined;
|
|
17
|
-
implements?: string[] | undefined;
|
|
18
|
-
}
|
|
19
|
-
interface SpecApiEndpoint {
|
|
20
|
-
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
21
|
-
path: string;
|
|
22
|
-
description: string;
|
|
23
|
-
request?: Record<string, unknown>;
|
|
24
|
-
response?: Record<string, unknown>;
|
|
25
|
-
auth?: boolean | undefined;
|
|
26
|
-
}
|
|
27
|
-
interface Specification {
|
|
28
|
-
id: string;
|
|
29
|
-
title: string;
|
|
30
|
-
version: string;
|
|
31
|
-
status: SpecStatus;
|
|
32
|
-
overview: string;
|
|
33
|
-
sections: SpecSection[];
|
|
34
|
-
requirements: SpecRequirement[];
|
|
35
|
-
apiEndpoints?: SpecApiEndpoint[] | undefined;
|
|
36
|
-
dependencies?: string[] | undefined;
|
|
37
|
-
createdAt: number;
|
|
38
|
-
updatedAt: number;
|
|
39
|
-
metadata?: Record<string, unknown>;
|
|
40
|
-
}
|
|
41
|
-
interface SpecAnalysis {
|
|
42
|
-
specId: string;
|
|
43
|
-
completeness: number;
|
|
44
|
-
coverage: {
|
|
45
|
-
requirements: number;
|
|
46
|
-
apiEndpoints: number;
|
|
47
|
-
edgeCases: number;
|
|
48
|
-
errorHandling: number;
|
|
49
|
-
};
|
|
50
|
-
gaps: string[];
|
|
51
|
-
risks: {
|
|
52
|
-
requirement: string;
|
|
53
|
-
risk: string;
|
|
54
|
-
severity: 'high' | 'medium' | 'low';
|
|
55
|
-
}[];
|
|
56
|
-
suggestions: string[];
|
|
57
|
-
}
|
|
58
|
-
interface SpecValidationResult {
|
|
59
|
-
valid: boolean;
|
|
60
|
-
errors: {
|
|
61
|
-
path: string;
|
|
62
|
-
message: string;
|
|
63
|
-
}[];
|
|
64
|
-
warnings: {
|
|
65
|
-
path: string;
|
|
66
|
-
message: string;
|
|
67
|
-
}[];
|
|
68
|
-
}
|
|
69
|
-
interface SpecTemplate {
|
|
70
|
-
id: string;
|
|
71
|
-
name: string;
|
|
72
|
-
description: string;
|
|
73
|
-
sections: Omit<SpecSection, 'content'>[];
|
|
74
|
-
defaultRequirements: Omit<SpecRequirement, 'id' | 'description'>[];
|
|
75
|
-
}
|
|
76
|
-
declare const DEFAULT_SPEC_TEMPLATE: SpecTemplate;
|
|
77
|
-
|
|
78
|
-
type TaskStatus = 'pending' | 'in_progress' | 'blocked' | 'failed' | 'review' | 'completed';
|
|
79
|
-
type TaskPriority = 'critical' | 'high' | 'medium' | 'low';
|
|
80
|
-
type TaskType = 'feature' | 'bugfix' | 'refactor' | 'docs' | 'test' | 'chore';
|
|
81
|
-
interface TaskNode {
|
|
82
|
-
id: string;
|
|
83
|
-
title: string;
|
|
84
|
-
description: string;
|
|
85
|
-
type: TaskType;
|
|
86
|
-
priority: TaskPriority;
|
|
87
|
-
status: TaskStatus;
|
|
88
|
-
assignee?: string | undefined;
|
|
89
|
-
estimateHours?: number | undefined;
|
|
90
|
-
actualHours?: number | undefined;
|
|
91
|
-
tags?: string[] | undefined;
|
|
92
|
-
specRequirementId?: string | undefined;
|
|
93
|
-
parentId?: string | undefined;
|
|
94
|
-
children?: string[] | undefined;
|
|
95
|
-
createdAt: number;
|
|
96
|
-
updatedAt: number;
|
|
97
|
-
startedAt?: number | undefined;
|
|
98
|
-
completedAt?: number | undefined;
|
|
99
|
-
metadata?: Record<string, unknown>;
|
|
100
|
-
}
|
|
101
|
-
interface TaskEdge {
|
|
102
|
-
id: string;
|
|
103
|
-
from: string;
|
|
104
|
-
to: string;
|
|
105
|
-
type: 'blocks' | 'depends_on' | 'relates_to' | 'implements';
|
|
106
|
-
weight?: number | undefined;
|
|
107
|
-
}
|
|
108
|
-
interface TaskGraph {
|
|
109
|
-
id: string;
|
|
110
|
-
specId: string;
|
|
111
|
-
title: string;
|
|
112
|
-
nodes: Map<string, TaskNode>;
|
|
113
|
-
edges: TaskEdge[];
|
|
114
|
-
rootNodes: string[];
|
|
115
|
-
createdAt: number;
|
|
116
|
-
updatedAt: number;
|
|
117
|
-
}
|
|
118
|
-
interface TaskDependency {
|
|
119
|
-
taskId: string;
|
|
120
|
-
blockedBy: string[];
|
|
121
|
-
blocking: string[];
|
|
122
|
-
}
|
|
123
|
-
interface TaskAssignment {
|
|
124
|
-
taskId: string;
|
|
125
|
-
assignee: string;
|
|
126
|
-
assignedAt: number;
|
|
127
|
-
}
|
|
128
|
-
interface TaskProgress {
|
|
129
|
-
total: number;
|
|
130
|
-
pending: number;
|
|
131
|
-
inProgress: number;
|
|
132
|
-
blocked: number;
|
|
133
|
-
failed: number;
|
|
134
|
-
review: number;
|
|
135
|
-
completed: number;
|
|
136
|
-
percentComplete: number;
|
|
137
|
-
estimatedHours: number;
|
|
138
|
-
actualHours: number;
|
|
139
|
-
}
|
|
140
|
-
interface TaskFilter {
|
|
141
|
-
status?: TaskStatus[] | undefined;
|
|
142
|
-
priority?: TaskPriority[] | undefined;
|
|
143
|
-
type?: TaskType[] | undefined;
|
|
144
|
-
assignee?: string[] | undefined;
|
|
145
|
-
tags?: string[] | undefined;
|
|
146
|
-
specRequirementId?: string | undefined;
|
|
147
|
-
}
|
|
148
|
-
interface TaskSort {
|
|
149
|
-
field: 'priority' | 'createdAt' | 'updatedAt' | 'status';
|
|
150
|
-
direction: 'asc' | 'desc';
|
|
151
|
-
}
|
|
152
|
-
interface CriticalPathResult {
|
|
153
|
-
taskIds: string[];
|
|
154
|
-
totalEstimateHours: number;
|
|
155
|
-
bottleneckTasks: string[];
|
|
156
|
-
}
|
|
157
|
-
declare function computeTaskProgress(graph: TaskGraph): TaskProgress;
|
|
158
|
-
declare function findCriticalPath(graph: TaskGraph): CriticalPathResult;
|
|
159
|
-
declare function topologicalSort(graph: TaskGraph): string[];
|
|
160
|
-
|
|
161
|
-
export { type CriticalPathResult as C, DEFAULT_SPEC_TEMPLATE as D, type SpecAnalysis as S, type TaskGraph as T, type TaskType as a, type TaskPriority as b, type TaskNode as c, type SpecApiEndpoint as d, type SpecRequirement as e, type SpecSection as f, type SpecSectionType as g, type SpecStatus as h, type SpecTemplate as i, type SpecValidationResult as j, type Specification as k, type TaskAssignment as l, type TaskDependency as m, type TaskEdge as n, type TaskFilter as o, type TaskProgress as p, type TaskSort as q, type TaskStatus as r, computeTaskProgress as s, findCriticalPath as t, topologicalSort as u };
|