@feelingmindful/thinking-graph 1.3.0 → 1.4.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/compat/sequential.d.ts +6 -11
- package/dist/compat/sequential.js +8 -7
- package/dist/index.js +1 -3
- package/dist/tools/export.d.ts +2 -2
- package/dist/tools/export.js +1 -1
- package/dist/tools/learn.js +1 -1
- package/dist/tools/recall.d.ts +2 -2
- package/dist/tools/recall.js +5 -4
- package/dist/tools/relate.d.ts +2 -2
- package/dist/tools/relate.js +3 -2
- package/dist/tools/think.d.ts +6 -6
- package/dist/tools/think.js +8 -7
- package/package.json +1 -1
- package/seeds/skill-registry.json +30 -30
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { ThinkingGraph } from '../engine/graph.js';
|
|
3
|
-
/**
|
|
4
|
-
* Backward compatibility shim for the original `sequentialthinking` tool.
|
|
5
|
-
* Maps the old API (thought, thoughtNumber, totalThoughts, nextThoughtNeeded)
|
|
6
|
-
* to the new `think` tool, preserving the original response format.
|
|
7
|
-
*/
|
|
8
3
|
export declare const sequentialSchema: z.ZodObject<{
|
|
9
4
|
thought: z.ZodString;
|
|
10
5
|
thoughtNumber: z.ZodNumber;
|
|
11
6
|
totalThoughts: z.ZodNumber;
|
|
12
|
-
nextThoughtNeeded: z.ZodBoolean
|
|
13
|
-
isRevision: z.ZodOptional<z.ZodBoolean
|
|
7
|
+
nextThoughtNeeded: z.ZodEffects<z.ZodBoolean, boolean, unknown>;
|
|
8
|
+
isRevision: z.ZodOptional<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
|
|
14
9
|
revisesThought: z.ZodOptional<z.ZodNumber>;
|
|
15
10
|
branchFromThought: z.ZodOptional<z.ZodNumber>;
|
|
16
11
|
branchId: z.ZodOptional<z.ZodString>;
|
|
17
|
-
needsMoreThoughts: z.ZodOptional<z.ZodBoolean
|
|
12
|
+
needsMoreThoughts: z.ZodOptional<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
|
|
18
13
|
}, "strip", z.ZodTypeAny, {
|
|
19
14
|
thought: string;
|
|
20
15
|
thoughtNumber: number;
|
|
@@ -29,12 +24,12 @@ export declare const sequentialSchema: z.ZodObject<{
|
|
|
29
24
|
thought: string;
|
|
30
25
|
thoughtNumber: number;
|
|
31
26
|
totalThoughts: number;
|
|
32
|
-
nextThoughtNeeded: boolean;
|
|
33
27
|
branchId?: string | undefined;
|
|
34
|
-
isRevision?:
|
|
28
|
+
isRevision?: unknown;
|
|
35
29
|
revisesThought?: number | undefined;
|
|
30
|
+
nextThoughtNeeded?: unknown;
|
|
36
31
|
branchFromThought?: number | undefined;
|
|
37
|
-
needsMoreThoughts?:
|
|
32
|
+
needsMoreThoughts?: unknown;
|
|
38
33
|
}>;
|
|
39
34
|
export type SequentialInput = z.infer<typeof sequentialSchema>;
|
|
40
35
|
export declare function compatHandler(graph: ThinkingGraph, input: SequentialInput): Promise<{
|
|
@@ -4,16 +4,17 @@ import { z } from 'zod';
|
|
|
4
4
|
* Maps the old API (thought, thoughtNumber, totalThoughts, nextThoughtNeeded)
|
|
5
5
|
* to the new `think` tool, preserving the original response format.
|
|
6
6
|
*/
|
|
7
|
+
const coerceBool = z.preprocess((v) => (v === 'true' ? true : v === 'false' ? false : v), z.boolean());
|
|
7
8
|
export const sequentialSchema = z.object({
|
|
8
9
|
thought: z.string().describe('The current thinking step'),
|
|
9
|
-
thoughtNumber: z.number().int().min(1).describe('Current thought number'),
|
|
10
|
-
totalThoughts: z.number().int().min(1).describe('Estimated total thoughts'),
|
|
11
|
-
nextThoughtNeeded:
|
|
12
|
-
isRevision:
|
|
13
|
-
revisesThought: z.number().int().min(1).optional(),
|
|
14
|
-
branchFromThought: z.number().int().min(1).optional(),
|
|
10
|
+
thoughtNumber: z.coerce.number().int().min(1).describe('Current thought number'),
|
|
11
|
+
totalThoughts: z.coerce.number().int().min(1).describe('Estimated total thoughts'),
|
|
12
|
+
nextThoughtNeeded: coerceBool.describe('Whether another step is needed'),
|
|
13
|
+
isRevision: coerceBool.optional(),
|
|
14
|
+
revisesThought: z.coerce.number().int().min(1).optional(),
|
|
15
|
+
branchFromThought: z.coerce.number().int().min(1).optional(),
|
|
15
16
|
branchId: z.string().optional(),
|
|
16
|
-
needsMoreThoughts:
|
|
17
|
+
needsMoreThoughts: coerceBool.optional(),
|
|
17
18
|
});
|
|
18
19
|
export async function compatHandler(graph, input) {
|
|
19
20
|
const session = await graph.getCurrentSession();
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import { relateSchema, relateHandler } from './tools/relate.js';
|
|
|
9
9
|
import { recallSchema, recallHandler } from './tools/recall.js';
|
|
10
10
|
import { learnSchema, learnHandler } from './tools/learn.js';
|
|
11
11
|
import { exportSchema, exportHandler } from './tools/export.js';
|
|
12
|
-
|
|
12
|
+
// Legacy compat shim removed — use `think` tool directly
|
|
13
13
|
// ─── Storage setup ───────────────────────────────────────
|
|
14
14
|
const memoryOnly = process.env.THINKING_GRAPH_MEMORY_ONLY === 'true';
|
|
15
15
|
const storage = memoryOnly
|
|
@@ -30,8 +30,6 @@ server.tool('relate', 'Create a typed, directional relationship between two node
|
|
|
30
30
|
server.tool('recall', 'Query the thinking graph — search by text, filter by type, traverse relationships, or search across projects.', recallSchema.shape, async (input) => recallHandler(graph, input));
|
|
31
31
|
server.tool('learn', 'Store durable knowledge — code facts, tech debt, insights, principles. Deduplicates similar content.', learnSchema.shape, async (input) => learnHandler(graph, input));
|
|
32
32
|
server.tool('export', 'Export the thinking graph as JSON or a human-readable markdown summary.', exportSchema.shape, async (input) => exportHandler(graph, input));
|
|
33
|
-
// Backward compat: register the original tool name
|
|
34
|
-
server.tool('sequentialthinking', 'Record a sequential thinking step (backward compatible with @modelcontextprotocol/server-sequential-thinking).', sequentialSchema.shape, async (input) => compatHandler(graph, input));
|
|
35
33
|
// ─── Startup ─────────────────────────────────────────────
|
|
36
34
|
async function main() {
|
|
37
35
|
await storage.initialize();
|
package/dist/tools/export.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare const exportSchema: z.ZodObject<{
|
|
|
5
5
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
6
6
|
projectId: z.ZodOptional<z.ZodString>;
|
|
7
7
|
type: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["thought", "decision", "insight", "code_fact", "assumption", "detection", "tech_debt", "principle", "pattern", "skill_result", "research"]>, z.ZodArray<z.ZodEnum<["thought", "decision", "insight", "code_fact", "assumption", "detection", "tech_debt", "principle", "pattern", "skill_result", "research"]>, "many">]>>;
|
|
8
|
-
includeEdges: z.ZodDefault<z.ZodOptional<z.ZodBoolean
|
|
8
|
+
includeEdges: z.ZodDefault<z.ZodOptional<z.ZodEffects<z.ZodBoolean, boolean, unknown>>>;
|
|
9
9
|
outputPath: z.ZodOptional<z.ZodString>;
|
|
10
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
11
|
format: "json" | "summary";
|
|
@@ -19,7 +19,7 @@ export declare const exportSchema: z.ZodObject<{
|
|
|
19
19
|
type?: "thought" | "decision" | "insight" | "code_fact" | "assumption" | "detection" | "tech_debt" | "principle" | "pattern" | "skill_result" | "research" | ("thought" | "decision" | "insight" | "code_fact" | "assumption" | "detection" | "tech_debt" | "principle" | "pattern" | "skill_result" | "research")[] | undefined;
|
|
20
20
|
sessionId?: string | undefined;
|
|
21
21
|
projectId?: string | undefined;
|
|
22
|
-
includeEdges?:
|
|
22
|
+
includeEdges?: unknown;
|
|
23
23
|
outputPath?: string | undefined;
|
|
24
24
|
}>;
|
|
25
25
|
export type ExportInput = z.infer<typeof exportSchema>;
|
package/dist/tools/export.js
CHANGED
|
@@ -6,7 +6,7 @@ export const exportSchema = z.object({
|
|
|
6
6
|
sessionId: z.string().optional(),
|
|
7
7
|
projectId: z.string().optional(),
|
|
8
8
|
type: z.union([z.enum(NODE_TYPES), z.array(z.enum(NODE_TYPES))]).optional(),
|
|
9
|
-
includeEdges: z.boolean().optional().default(true),
|
|
9
|
+
includeEdges: z.preprocess((v) => (v === 'true' ? true : v === 'false' ? false : v), z.boolean()).optional().default(true),
|
|
10
10
|
outputPath: z.string().optional().describe('Write to file'),
|
|
11
11
|
});
|
|
12
12
|
export async function exportHandler(graph, input) {
|
package/dist/tools/learn.js
CHANGED
|
@@ -5,7 +5,7 @@ export const learnSchema = z.object({
|
|
|
5
5
|
type: z.enum(NODE_TYPES).describe('Node type'),
|
|
6
6
|
projectId: z.string().optional(),
|
|
7
7
|
filePath: z.string().optional().describe('For code_facts'),
|
|
8
|
-
lineRange: z.tuple([z.number(), z.number()]).optional().describe('Line range [start, end]'),
|
|
8
|
+
lineRange: z.tuple([z.coerce.number(), z.coerce.number()]).optional().describe('Line range [start, end]'),
|
|
9
9
|
severity: z.enum(['critical', 'high', 'medium', 'low']).optional().describe('For tech_debt'),
|
|
10
10
|
effort: z.string().optional().describe('Estimated fix effort'),
|
|
11
11
|
impact: z.string().optional().describe('What breaks if unfixed'),
|
package/dist/tools/recall.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare const recallSchema: z.ZodObject<{
|
|
|
5
5
|
type: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["thought", "decision", "insight", "code_fact", "assumption", "detection", "tech_debt", "principle", "pattern", "skill_result", "research"]>, z.ZodArray<z.ZodEnum<["thought", "decision", "insight", "code_fact", "assumption", "detection", "tech_debt", "principle", "pattern", "skill_result", "research"]>, "many">]>>;
|
|
6
6
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
7
7
|
projectId: z.ZodOptional<z.ZodString>;
|
|
8
|
-
crossProject: z.ZodOptional<z.ZodBoolean
|
|
8
|
+
crossProject: z.ZodOptional<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
|
|
9
9
|
relatedTo: z.ZodOptional<z.ZodString>;
|
|
10
10
|
edgeType: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["depends_on", "contradicts", "supports", "refines", "supersedes", "similar_to", "located_in", "violates", "addresses", "detected_by", "invoked_by"]>, z.ZodArray<z.ZodEnum<["depends_on", "contradicts", "supports", "refines", "supersedes", "similar_to", "located_in", "violates", "addresses", "detected_by", "invoked_by"]>, "many">]>>;
|
|
11
11
|
direction: z.ZodOptional<z.ZodEnum<["outgoing", "incoming", "both"]>>;
|
|
@@ -34,7 +34,7 @@ export declare const recallSchema: z.ZodObject<{
|
|
|
34
34
|
projectId?: string | undefined;
|
|
35
35
|
metadata?: Record<string, unknown> | undefined;
|
|
36
36
|
query?: string | undefined;
|
|
37
|
-
crossProject?:
|
|
37
|
+
crossProject?: unknown;
|
|
38
38
|
relatedTo?: string | undefined;
|
|
39
39
|
edgeType?: "depends_on" | "contradicts" | "supports" | "refines" | "supersedes" | "similar_to" | "located_in" | "violates" | "addresses" | "detected_by" | "invoked_by" | ("depends_on" | "contradicts" | "supports" | "refines" | "supersedes" | "similar_to" | "located_in" | "violates" | "addresses" | "detected_by" | "invoked_by")[] | undefined;
|
|
40
40
|
direction?: "outgoing" | "incoming" | "both" | undefined;
|
package/dist/tools/recall.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { NODE_TYPES, EDGE_TYPES } from '../engine/types.js';
|
|
3
|
+
const coerceBool = z.preprocess((v) => (v === 'true' ? true : v === 'false' ? false : v), z.boolean());
|
|
3
4
|
export const recallSchema = z.object({
|
|
4
5
|
query: z.string().optional().describe('Full-text search'),
|
|
5
6
|
type: z.union([z.enum(NODE_TYPES), z.array(z.enum(NODE_TYPES))]).optional(),
|
|
6
7
|
sessionId: z.string().optional(),
|
|
7
8
|
projectId: z.string().optional(),
|
|
8
|
-
crossProject:
|
|
9
|
+
crossProject: coerceBool.optional().describe('Search across all projects'),
|
|
9
10
|
relatedTo: z.string().optional().describe('Find nodes connected to this ID'),
|
|
10
11
|
edgeType: z.union([z.enum(EDGE_TYPES), z.array(z.enum(EDGE_TYPES))]).optional(),
|
|
11
12
|
direction: z.enum(['outgoing', 'incoming', 'both']).optional(),
|
|
12
|
-
depth: z.number().int().min(1).optional().describe('Traversal depth'),
|
|
13
|
+
depth: z.coerce.number().int().min(1).optional().describe('Traversal depth'),
|
|
13
14
|
since: z.string().optional().describe('ISO timestamp'),
|
|
14
15
|
metadata: z.record(z.unknown()).optional(),
|
|
15
|
-
limit: z.number().int().min(1).max(100).optional(),
|
|
16
|
-
offset: z.number().int().min(0).optional(),
|
|
16
|
+
limit: z.coerce.number().int().min(1).max(100).optional(),
|
|
17
|
+
offset: z.coerce.number().int().min(0).optional(),
|
|
17
18
|
});
|
|
18
19
|
export async function recallHandler(graph, input) {
|
|
19
20
|
// If relatedTo is specified, use graph traversal
|
package/dist/tools/relate.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare const relateSchema: z.ZodObject<{
|
|
|
6
6
|
type: z.ZodEnum<["depends_on", "contradicts", "supports", "refines", "supersedes", "similar_to", "located_in", "violates", "addresses", "detected_by", "invoked_by"]>;
|
|
7
7
|
weight: z.ZodOptional<z.ZodNumber>;
|
|
8
8
|
reasoning: z.ZodOptional<z.ZodString>;
|
|
9
|
-
bidirectional: z.ZodOptional<z.ZodBoolean
|
|
9
|
+
bidirectional: z.ZodOptional<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
|
|
10
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
11
|
type: "depends_on" | "contradicts" | "supports" | "refines" | "supersedes" | "similar_to" | "located_in" | "violates" | "addresses" | "detected_by" | "invoked_by";
|
|
12
12
|
sourceId: string;
|
|
@@ -20,7 +20,7 @@ export declare const relateSchema: z.ZodObject<{
|
|
|
20
20
|
targetId: string;
|
|
21
21
|
weight?: number | undefined;
|
|
22
22
|
reasoning?: string | undefined;
|
|
23
|
-
bidirectional?:
|
|
23
|
+
bidirectional?: unknown;
|
|
24
24
|
}>;
|
|
25
25
|
export type RelateInput = z.infer<typeof relateSchema>;
|
|
26
26
|
export declare function relateHandler(graph: ThinkingGraph, input: RelateInput): Promise<{
|
package/dist/tools/relate.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { EDGE_TYPES } from '../engine/types.js';
|
|
3
|
+
const coerceBool = z.preprocess((v) => (v === 'true' ? true : v === 'false' ? false : v), z.boolean());
|
|
3
4
|
export const relateSchema = z.object({
|
|
4
5
|
sourceId: z.string().describe('Node ID (prefix with "?" for content search)'),
|
|
5
6
|
targetId: z.string().describe('Node ID, content search, or principle name'),
|
|
6
7
|
type: z.enum(EDGE_TYPES).describe('Relationship type'),
|
|
7
|
-
weight: z.number().min(0).max(1).optional().describe('Confidence 0-1'),
|
|
8
|
+
weight: z.coerce.number().min(0).max(1).optional().describe('Confidence 0-1'),
|
|
8
9
|
reasoning: z.string().optional().describe('Why this relationship exists'),
|
|
9
|
-
bidirectional:
|
|
10
|
+
bidirectional: coerceBool.optional().describe('Create reverse edge too'),
|
|
10
11
|
});
|
|
11
12
|
async function resolveId(graph, id) {
|
|
12
13
|
if (id.startsWith('?')) {
|
package/dist/tools/think.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare const thinkSchema: z.ZodObject<{
|
|
|
5
5
|
type: z.ZodDefault<z.ZodEnum<["thought", "decision", "insight", "code_fact", "assumption", "detection", "tech_debt", "principle", "pattern", "skill_result", "research"]>>;
|
|
6
6
|
thoughtNumber: z.ZodNumber;
|
|
7
7
|
totalThoughts: z.ZodNumber;
|
|
8
|
-
nextThoughtNeeded: z.ZodBoolean
|
|
8
|
+
nextThoughtNeeded: z.ZodEffects<z.ZodBoolean, boolean, unknown>;
|
|
9
9
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
10
10
|
projectId: z.ZodOptional<z.ZodString>;
|
|
11
11
|
relates: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -22,11 +22,11 @@ export declare const thinkSchema: z.ZodObject<{
|
|
|
22
22
|
reasoning?: string | undefined;
|
|
23
23
|
}>, "many">>;
|
|
24
24
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
25
|
-
isRevision: z.ZodOptional<z.ZodBoolean
|
|
25
|
+
isRevision: z.ZodOptional<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
|
|
26
26
|
revisesThought: z.ZodOptional<z.ZodNumber>;
|
|
27
27
|
branchFromThought: z.ZodOptional<z.ZodNumber>;
|
|
28
28
|
branchId: z.ZodOptional<z.ZodString>;
|
|
29
|
-
needsMoreThoughts: z.ZodOptional<z.ZodBoolean
|
|
29
|
+
needsMoreThoughts: z.ZodOptional<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
|
|
30
30
|
}, "strip", z.ZodTypeAny, {
|
|
31
31
|
thought: string;
|
|
32
32
|
type: "thought" | "decision" | "insight" | "code_fact" | "assumption" | "detection" | "tech_debt" | "principle" | "pattern" | "skill_result" | "research";
|
|
@@ -50,21 +50,21 @@ export declare const thinkSchema: z.ZodObject<{
|
|
|
50
50
|
thought: string;
|
|
51
51
|
thoughtNumber: number;
|
|
52
52
|
totalThoughts: number;
|
|
53
|
-
nextThoughtNeeded: boolean;
|
|
54
53
|
type?: "thought" | "decision" | "insight" | "code_fact" | "assumption" | "detection" | "tech_debt" | "principle" | "pattern" | "skill_result" | "research" | undefined;
|
|
55
54
|
sessionId?: string | undefined;
|
|
56
55
|
projectId?: string | undefined;
|
|
57
56
|
metadata?: Record<string, unknown> | undefined;
|
|
58
57
|
branchId?: string | undefined;
|
|
59
|
-
isRevision?:
|
|
58
|
+
isRevision?: unknown;
|
|
60
59
|
revisesThought?: number | undefined;
|
|
60
|
+
nextThoughtNeeded?: unknown;
|
|
61
61
|
relates?: {
|
|
62
62
|
type: "depends_on" | "contradicts" | "supports" | "refines" | "supersedes" | "similar_to" | "located_in" | "violates" | "addresses" | "detected_by" | "invoked_by";
|
|
63
63
|
targetId: string;
|
|
64
64
|
reasoning?: string | undefined;
|
|
65
65
|
}[] | undefined;
|
|
66
66
|
branchFromThought?: number | undefined;
|
|
67
|
-
needsMoreThoughts?:
|
|
67
|
+
needsMoreThoughts?: unknown;
|
|
68
68
|
}>;
|
|
69
69
|
export type ThinkInput = z.infer<typeof thinkSchema>;
|
|
70
70
|
export declare function thinkHandler(graph: ThinkingGraph, input: ThinkInput): Promise<{
|
package/dist/tools/think.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { NODE_TYPES, EDGE_TYPES } from '../engine/types.js';
|
|
3
|
+
const coerceBool = z.preprocess((v) => (v === 'true' ? true : v === 'false' ? false : v), z.boolean());
|
|
3
4
|
export const thinkSchema = z.object({
|
|
4
5
|
thought: z.string().describe('The reasoning content'),
|
|
5
6
|
type: z.enum(NODE_TYPES).default('thought').describe('Node type'),
|
|
6
|
-
thoughtNumber: z.number().int().min(1).describe('Current thought number'),
|
|
7
|
-
totalThoughts: z.number().int().min(1).describe('Estimated total thoughts'),
|
|
8
|
-
nextThoughtNeeded:
|
|
7
|
+
thoughtNumber: z.coerce.number().int().min(1).describe('Current thought number'),
|
|
8
|
+
totalThoughts: z.coerce.number().int().min(1).describe('Estimated total thoughts'),
|
|
9
|
+
nextThoughtNeeded: coerceBool.describe('Whether another step is needed'),
|
|
9
10
|
sessionId: z.string().optional().describe('Session ID (auto-generated if omitted)'),
|
|
10
11
|
projectId: z.string().optional().describe('Project ID (detected from cwd if omitted)'),
|
|
11
12
|
relates: z.array(z.object({
|
|
@@ -15,11 +16,11 @@ export const thinkSchema = z.object({
|
|
|
15
16
|
})).optional().describe('Inline relationships'),
|
|
16
17
|
metadata: z.record(z.unknown()).optional().describe('Flexible metadata'),
|
|
17
18
|
// Backward compat
|
|
18
|
-
isRevision:
|
|
19
|
-
revisesThought: z.number().int().min(1).optional(),
|
|
20
|
-
branchFromThought: z.number().int().min(1).optional(),
|
|
19
|
+
isRevision: coerceBool.optional(),
|
|
20
|
+
revisesThought: z.coerce.number().int().min(1).optional(),
|
|
21
|
+
branchFromThought: z.coerce.number().int().min(1).optional(),
|
|
21
22
|
branchId: z.string().optional(),
|
|
22
|
-
needsMoreThoughts:
|
|
23
|
+
needsMoreThoughts: coerceBool.optional(),
|
|
23
24
|
});
|
|
24
25
|
export async function thinkHandler(graph, input) {
|
|
25
26
|
const session = input.sessionId
|
package/package.json
CHANGED
|
@@ -90,74 +90,74 @@
|
|
|
90
90
|
"produces": [], "invokes": ["premium-android:research", "premium-android:init", "premium-android:configure", "premium-android:refactor", "premium-android:create", "premium-core:growth", "premium-core:humanize", "premium-android:audit"], "platform": "android"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
|
-
"id": "nextjs-research", "pluginName": "premium-
|
|
94
|
-
"invocation": "/premium-nextjs
|
|
93
|
+
"id": "nextjs-research", "pluginName": "premium-web", "skillName": "nextjs", "verb": "research",
|
|
94
|
+
"invocation": "/premium-web:nextjs", "areas": [], "detects": [],
|
|
95
95
|
"produces": ["research"], "invokes": ["premium-core:research"], "platform": "nextjs"
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
|
-
"id": "nextjs-init", "pluginName": "premium-
|
|
99
|
-
"invocation": "/premium-nextjs
|
|
98
|
+
"id": "nextjs-init", "pluginName": "premium-web", "skillName": "nextjs", "verb": "init",
|
|
99
|
+
"invocation": "/premium-web:nextjs", "areas": ["infra", "design-tokens", "monetization", "observability"], "detects": ["missing"],
|
|
100
100
|
"produces": ["code_fact", "decision"], "invokes": [], "platform": "nextjs"
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
|
-
"id": "nextjs-configure", "pluginName": "premium-
|
|
104
|
-
"invocation": "/premium-nextjs
|
|
103
|
+
"id": "nextjs-configure", "pluginName": "premium-web", "skillName": "nextjs", "verb": "configure",
|
|
104
|
+
"invocation": "/premium-web:nextjs", "areas": ["infra", "security", "observability"], "detects": ["needs-work"],
|
|
105
105
|
"produces": ["code_fact"], "invokes": [], "platform": "nextjs"
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
|
-
"id": "nextjs-refactor", "pluginName": "premium-
|
|
109
|
-
"invocation": "/premium-nextjs
|
|
108
|
+
"id": "nextjs-refactor", "pluginName": "premium-web", "skillName": "nextjs", "verb": "refactor",
|
|
109
|
+
"invocation": "/premium-web:nextjs", "areas": ["architecture", "design-tokens", "icons", "copy"], "detects": ["needs-work"],
|
|
110
110
|
"produces": ["tech_debt", "code_fact", "decision"], "invokes": ["premium-core:humanize"], "platform": "nextjs"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
|
-
"id": "nextjs-create", "pluginName": "premium-
|
|
114
|
-
"invocation": "/premium-nextjs
|
|
113
|
+
"id": "nextjs-create", "pluginName": "premium-web", "skillName": "nextjs", "verb": "create",
|
|
114
|
+
"invocation": "/premium-web:nextjs", "areas": ["design-tokens", "animations", "typography", "icons", "monetization"], "detects": ["missing"],
|
|
115
115
|
"produces": ["code_fact", "decision"], "invokes": [], "platform": "nextjs"
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
|
-
"id": "nextjs-audit", "pluginName": "premium-
|
|
119
|
-
"invocation": "/premium-nextjs
|
|
118
|
+
"id": "nextjs-audit", "pluginName": "premium-web", "skillName": "nextjs", "verb": "audit",
|
|
119
|
+
"invocation": "/premium-web:nextjs", "areas": ["architecture", "design-tokens", "typography", "icons", "copy", "monetization", "security", "observability", "seo"], "detects": ["missing", "needs-work", "good"],
|
|
120
120
|
"produces": ["detection", "tech_debt"], "invokes": ["premium-core:audit"], "platform": "nextjs"
|
|
121
121
|
},
|
|
122
122
|
{
|
|
123
|
-
"id": "nextjs-full", "pluginName": "premium-
|
|
124
|
-
"invocation": "/premium-nextjs
|
|
125
|
-
"produces": [], "invokes": ["premium-
|
|
123
|
+
"id": "nextjs-full", "pluginName": "premium-web", "skillName": "nextjs", "verb": "full",
|
|
124
|
+
"invocation": "/premium-web:nextjs", "areas": [], "detects": [],
|
|
125
|
+
"produces": [], "invokes": ["premium-web:nextjs", "premium-core:growth", "premium-core:humanize"], "platform": "nextjs"
|
|
126
126
|
},
|
|
127
127
|
{
|
|
128
|
-
"id": "astro-research", "pluginName": "premium-
|
|
129
|
-
"invocation": "/premium-astro
|
|
128
|
+
"id": "astro-research", "pluginName": "premium-web", "skillName": "astro", "verb": "research",
|
|
129
|
+
"invocation": "/premium-web:astro", "areas": [], "detects": [],
|
|
130
130
|
"produces": ["research"], "invokes": ["premium-core:research"], "platform": "astro"
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
|
-
"id": "astro-init", "pluginName": "premium-
|
|
134
|
-
"invocation": "/premium-astro
|
|
133
|
+
"id": "astro-init", "pluginName": "premium-web", "skillName": "astro", "verb": "init",
|
|
134
|
+
"invocation": "/premium-web:astro", "areas": ["infra", "design-tokens", "monetization", "observability"], "detects": ["missing"],
|
|
135
135
|
"produces": ["code_fact", "decision"], "invokes": [], "platform": "astro"
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
|
-
"id": "astro-configure", "pluginName": "premium-
|
|
139
|
-
"invocation": "/premium-astro
|
|
138
|
+
"id": "astro-configure", "pluginName": "premium-web", "skillName": "astro", "verb": "configure",
|
|
139
|
+
"invocation": "/premium-web:astro", "areas": ["infra", "security", "observability"], "detects": ["needs-work"],
|
|
140
140
|
"produces": ["code_fact"], "invokes": [], "platform": "astro"
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
|
-
"id": "astro-refactor", "pluginName": "premium-
|
|
144
|
-
"invocation": "/premium-astro
|
|
143
|
+
"id": "astro-refactor", "pluginName": "premium-web", "skillName": "astro", "verb": "refactor",
|
|
144
|
+
"invocation": "/premium-web:astro", "areas": ["architecture", "design-tokens", "islands-hydration", "copy"], "detects": ["needs-work"],
|
|
145
145
|
"produces": ["tech_debt", "code_fact", "decision"], "invokes": ["premium-core:humanize"], "platform": "astro"
|
|
146
146
|
},
|
|
147
147
|
{
|
|
148
|
-
"id": "astro-create", "pluginName": "premium-
|
|
149
|
-
"invocation": "/premium-astro
|
|
148
|
+
"id": "astro-create", "pluginName": "premium-web", "skillName": "astro", "verb": "create",
|
|
149
|
+
"invocation": "/premium-web:astro", "areas": ["design-tokens", "animations", "typography", "icons", "monetization"], "detects": ["missing"],
|
|
150
150
|
"produces": ["code_fact", "decision"], "invokes": [], "platform": "astro"
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
|
-
"id": "astro-audit", "pluginName": "premium-
|
|
154
|
-
"invocation": "/premium-astro
|
|
153
|
+
"id": "astro-audit", "pluginName": "premium-web", "skillName": "astro", "verb": "audit",
|
|
154
|
+
"invocation": "/premium-web:astro", "areas": ["architecture", "design-tokens", "islands-hydration", "content-collections", "copy", "monetization", "security", "observability", "seo"], "detects": ["missing", "needs-work", "good"],
|
|
155
155
|
"produces": ["detection", "tech_debt"], "invokes": ["premium-core:audit"], "platform": "astro"
|
|
156
156
|
},
|
|
157
157
|
{
|
|
158
|
-
"id": "astro-full", "pluginName": "premium-
|
|
159
|
-
"invocation": "/premium-astro
|
|
160
|
-
"produces": [], "invokes": ["premium-
|
|
158
|
+
"id": "astro-full", "pluginName": "premium-web", "skillName": "astro", "verb": "full",
|
|
159
|
+
"invocation": "/premium-web:astro", "areas": [], "detects": [],
|
|
160
|
+
"produces": [], "invokes": ["premium-web:astro", "premium-core:growth", "premium-core:humanize"], "platform": "astro"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"id": "marketing-product-context", "pluginName": "marketing-skills", "skillName": "product-marketing-context", "verb": "context",
|