studiograph 1.2.0-beta.7 → 1.2.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/README.md +13 -18
- package/dist/agent/orchestrator.d.ts +57 -0
- package/dist/agent/orchestrator.js +169 -22
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/system.md +51 -63
- package/dist/agent/skill-loader.js +8 -0
- package/dist/agent/skill-loader.js.map +1 -1
- package/dist/agent/skills/entity-schema.md +4 -19
- package/dist/agent/skills/gather-context.md +1 -1
- package/dist/agent/skills/sync-setup.md +17 -1
- package/dist/agent/tools/graph-tools.d.ts +41 -1
- package/dist/agent/tools/graph-tools.js +133 -57
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/ops-tools.js +82 -0
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +90 -0
- package/dist/agent/tools/permission-tools.js +207 -0
- package/dist/agent/tools/permission-tools.js.map +1 -0
- package/dist/agent/tools/sync-tools.d.ts +9 -1
- package/dist/agent/tools/sync-tools.js +259 -3
- package/dist/agent/tools/sync-tools.js.map +1 -1
- package/dist/auth/github.d.ts +1 -1
- package/dist/auth/github.js +21 -13
- package/dist/auth/github.js.map +1 -1
- package/dist/cli/commands/access.d.ts +11 -0
- package/dist/cli/commands/access.js +156 -0
- package/dist/cli/commands/access.js.map +1 -0
- package/dist/cli/commands/app.js +25 -2
- package/dist/cli/commands/app.js.map +1 -1
- package/dist/cli/commands/clear.d.ts +5 -0
- package/dist/cli/commands/clear.js +36 -0
- package/dist/cli/commands/clear.js.map +1 -0
- package/dist/cli/commands/clone.js +3 -3
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/collection.d.ts +10 -0
- package/dist/cli/commands/collection.js +187 -0
- package/dist/cli/commands/collection.js.map +1 -0
- package/dist/cli/commands/commit.js +2 -1
- package/dist/cli/commands/commit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +100 -0
- package/dist/cli/commands/config.js +1 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/deploy.js +10 -1
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/index.js +1 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.js +32 -40
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/join.d.ts +0 -6
- package/dist/cli/commands/join.js +26 -111
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/lint.js +1 -2
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/mcp.js +6 -5
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/org.d.ts +10 -0
- package/dist/cli/commands/org.js +132 -0
- package/dist/cli/commands/org.js.map +1 -0
- package/dist/cli/commands/orphans.js +1 -2
- package/dist/cli/commands/orphans.js.map +1 -1
- package/dist/cli/commands/provision.js +3 -3
- package/dist/cli/commands/provision.js.map +1 -1
- package/dist/cli/commands/resolve.d.ts +8 -0
- package/dist/cli/commands/resolve.js +85 -0
- package/dist/cli/commands/resolve.js.map +1 -0
- package/dist/cli/commands/serve.js +55 -25
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/start.js +25 -206
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/sync.js +53 -8
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/team.d.ts +12 -0
- package/dist/cli/commands/team.js +185 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/index.js +41 -34
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/scaffolding.d.ts +5 -3
- package/dist/cli/scaffolding.js +191 -97
- package/dist/cli/scaffolding.js.map +1 -1
- package/dist/cli/setup-wizard.js +20 -10
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/cli/sync-review-interactive.js +1 -1
- package/dist/cli/sync-review-interactive.js.map +1 -1
- package/dist/core/graph.d.ts +7 -10
- package/dist/core/graph.js +88 -89
- package/dist/core/graph.js.map +1 -1
- package/dist/core/types.d.ts +19 -34
- package/dist/core/types.js +3 -21
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +27 -0
- package/dist/core/user-config.js +51 -0
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +978 -2182
- package/dist/core/validation.js +242 -397
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +32 -31
- package/dist/core/workspace-manager.js +171 -186
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +0 -5
- package/dist/core/workspace.js +33 -101
- package/dist/core/workspace.js.map +1 -1
- package/dist/lib/lib/utils.d.ts +2 -0
- package/dist/lib/lib/utils.js +6 -0
- package/dist/lib/lib/utils.js.map +1 -0
- package/dist/mcp/tools.js +13 -13
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/chrome/chrome.css +562 -0
- package/dist/server/chrome/chrome.js +540 -0
- package/dist/server/index.js +163 -10
- package/dist/server/index.js.map +1 -1
- package/dist/server/plugin-loader.d.ts +7 -0
- package/dist/server/plugin-loader.js +9 -1
- package/dist/server/plugin-loader.js.map +1 -1
- package/dist/server/routes/chat.d.ts +3 -2
- package/dist/server/routes/chat.js +67 -16
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/git-api.d.ts +9 -0
- package/dist/server/routes/git-api.js +82 -0
- package/dist/server/routes/git-api.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +2 -2
- package/dist/server/routes/graph-api.js +267 -3
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/permissions-api.d.ts +9 -0
- package/dist/server/routes/permissions-api.js +176 -0
- package/dist/server/routes/permissions-api.js.map +1 -0
- package/dist/server/routes/workspace-api.d.ts +9 -0
- package/dist/server/routes/workspace-api.js +283 -0
- package/dist/server/routes/workspace-api.js.map +1 -0
- package/dist/services/assets/base.d.ts +2 -2
- package/dist/services/assets/base.js +4 -4
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +6 -6
- package/dist/services/assets/index.js +12 -12
- package/dist/services/assets/index.js.map +1 -1
- package/dist/services/git.d.ts +35 -0
- package/dist/services/git.js +93 -0
- package/dist/services/git.js.map +1 -1
- package/dist/services/github-provisioner.js +1 -2
- package/dist/services/github-provisioner.js.map +1 -1
- package/dist/services/github-service.d.ts +99 -0
- package/dist/services/github-service.js +310 -0
- package/dist/services/github-service.js.map +1 -0
- package/dist/services/markdown.js +4 -9
- package/dist/services/markdown.js.map +1 -1
- package/dist/services/memory-service.d.ts +4 -0
- package/dist/services/memory-service.js +13 -1
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/sync/commit.d.ts +2 -0
- package/dist/services/sync/commit.js +21 -6
- package/dist/services/sync/commit.js.map +1 -1
- package/dist/services/sync/graphrag-indexer.js +2 -2
- package/dist/services/sync/graphrag-indexer.js.map +1 -1
- package/dist/utils/git.d.ts +5 -0
- package/dist/utils/git.js +10 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/merge-resolver.d.ts +33 -8
- package/dist/utils/merge-resolver.js +157 -55
- package/dist/utils/merge-resolver.js.map +1 -1
- package/dist/utils/preflight.d.ts +1 -1
- package/dist/utils/preflight.js +1 -1
- package/dist/web/_app/env.js +1 -0
- package/dist/web/_app/immutable/assets/0.CDbX4Cwz.css +1 -0
- package/dist/web/_app/immutable/assets/2.DRHi7ABa.css +1 -0
- package/dist/web/_app/immutable/assets/3.BJy7pVXi.css +1 -0
- package/dist/web/_app/immutable/assets/4.Ad16uh9o.css +1 -0
- package/dist/web/_app/immutable/assets/5.BhKgiXd2.css +1 -0
- package/dist/web/_app/immutable/assets/6.CeHKR5ZY.css +1 -0
- package/dist/web/_app/immutable/assets/AppShell.CXdE5aqF.css +1 -0
- package/dist/web/_app/immutable/assets/ChatPanel.RFD5GGYI.css +1 -0
- package/dist/web/_app/immutable/assets/editor.CPAf2SRV.css +1 -0
- package/dist/web/_app/immutable/chunks/3_5VIr68.js +1 -0
- package/dist/web/_app/immutable/chunks/4QY4j-jX.js +1 -0
- package/dist/web/_app/immutable/chunks/B0nldqWF.js +23 -0
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +3383 -0
- package/dist/web/_app/immutable/chunks/BButMJ6M.js +1 -0
- package/dist/web/_app/immutable/chunks/BiubvAUI.js +2 -0
- package/dist/web/_app/immutable/chunks/CAXuTUkp.js +1 -0
- package/dist/web/_app/immutable/chunks/CUzqHQY_.js +1 -0
- package/dist/web/_app/immutable/chunks/CYrVHOHA.js +1 -0
- package/dist/web/_app/immutable/chunks/CqkleIqs.js +1 -0
- package/dist/web/_app/immutable/chunks/DPmdIe6Y.js +1 -0
- package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +18 -0
- package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +5 -0
- package/dist/web/_app/immutable/chunks/DsERsGWg.js +64 -0
- package/dist/web/_app/immutable/chunks/DtVH--hH.js +6 -0
- package/dist/web/_app/immutable/chunks/F20aIBpJ.js +1 -0
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +1 -0
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +1 -0
- package/dist/web/_app/immutable/chunks/YFT1281h.js +2 -0
- package/dist/web/_app/immutable/chunks/aosHekRC.js +1 -0
- package/dist/web/_app/immutable/chunks/fwnBoL5x.js +1 -0
- package/dist/web/_app/immutable/chunks/hHxe9oXh.js +1 -0
- package/dist/web/_app/immutable/chunks/nZKqDQ0w.js +6 -0
- package/dist/web/_app/immutable/entry/app.B6Ngvu5P.js +2 -0
- package/dist/web/_app/immutable/entry/start.NykKAKQv.js +1 -0
- package/dist/web/_app/immutable/nodes/0.DQ5KdeNU.js +1 -0
- package/dist/web/_app/immutable/nodes/1.BR6DZ9ov.js +1 -0
- package/dist/web/_app/immutable/nodes/2.COSjVZ_C.js +1 -0
- package/dist/web/_app/immutable/nodes/3.B9r1XIlO.js +1 -0
- package/dist/web/_app/immutable/nodes/4.p-c6hlFf.js +16 -0
- package/dist/web/_app/immutable/nodes/5.CPc-Bqal.js +4 -0
- package/dist/web/_app/immutable/nodes/6.jJ67YnBc.js +2 -0
- package/dist/web/_app/version.json +1 -0
- package/dist/web/index.html +43 -0
- package/package.json +21 -3
|
@@ -12,7 +12,7 @@ You can help users with:
|
|
|
12
12
|
- Suggest appropriate entity types for user needs
|
|
13
13
|
|
|
14
14
|
2. **Knowledge Graph Navigation**
|
|
15
|
-
- Search across
|
|
15
|
+
- Search across collections
|
|
16
16
|
- Follow wikilink relationships
|
|
17
17
|
- Find related entities and backlinks
|
|
18
18
|
- Validate wikilinks to ensure data integrity
|
|
@@ -31,7 +31,7 @@ You can help users with:
|
|
|
31
31
|
|
|
32
32
|
**Be Action-Oriented:**
|
|
33
33
|
- When you have a tool that can answer a question, call it first — then discuss results
|
|
34
|
-
- Don't ask users to provide information you can look up yourself (e.g.
|
|
34
|
+
- Don't ask users to provide information you can look up yourself (e.g. workspace status, entity data)
|
|
35
35
|
- Explain what you're doing and why
|
|
36
36
|
- Suggest next steps proactively
|
|
37
37
|
|
|
@@ -47,6 +47,11 @@ You can help users with:
|
|
|
47
47
|
- Recommend useful searches or queries
|
|
48
48
|
- Help users discover patterns in their knowledge graph
|
|
49
49
|
|
|
50
|
+
**Communication Style:**
|
|
51
|
+
- NEVER use emojis or emoticons in any response — no exceptions
|
|
52
|
+
- Use plain text only: dashes, bullets, and bold for emphasis
|
|
53
|
+
- Keep language clear, direct, and professional
|
|
54
|
+
|
|
50
55
|
**Respect Structure:**
|
|
51
56
|
- Follow the established entity schemas
|
|
52
57
|
- Maintain consistent naming conventions (kebab-case IDs)
|
|
@@ -55,53 +60,49 @@ You can help users with:
|
|
|
55
60
|
|
|
56
61
|
## Entity Types
|
|
57
62
|
|
|
58
|
-
You have access to
|
|
59
|
-
|
|
60
|
-
**
|
|
61
|
-
- `
|
|
62
|
-
- `
|
|
63
|
-
- `
|
|
64
|
-
- `task`: Lightweight action items and to-dos (assignee, due_date, status: open/in-progress/done/cancelled, priority, related to projects/meetings/deliverables)
|
|
65
|
-
- `brief`: Project requirements and specifications
|
|
66
|
-
- `deliverable`: Scoped contractual output promised to a client (e.g. "Brand Identity System"); contains multiple artifacts
|
|
67
|
-
- `artifact`: Individual generated outputs (decks, docs, prototypes) produced within a deliverable
|
|
68
|
-
|
|
69
|
-
**Function Repos:**
|
|
70
|
-
- `deal`: Pre-project sales opportunity moving through the pipeline (scoping → proposal → negotiating → won/lost)
|
|
71
|
-
- `proposal`: Client proposals with pricing
|
|
72
|
-
- `contract`: SOWs, MSAs, NDAs
|
|
73
|
-
- `client`: Organizations — use `status: prospect` for leads not yet engaged
|
|
74
|
-
- `person`: Individual contacts (external clients, partners, team members) with optional `reports_to` and `department`
|
|
75
|
-
- `financial-plan`: Budgets, rates, forecasts
|
|
76
|
-
- `vendor`: External suppliers, freelancers, and partners (type: freelancer/agency/supplier/platform/partner)
|
|
77
|
-
- `role`: Generalized role definitions from the firm's leveling framework (title, department, level, responsibilities + leveling criteria)
|
|
78
|
-
|
|
79
|
-
**Shared Resource Repos:**
|
|
80
|
-
- `template`: Document templates
|
|
81
|
-
- `process`: Standardized workflows
|
|
82
|
-
- `standard`: Guidelines and best practices
|
|
83
|
-
- `reference`: External examples (projects, articles, tools)
|
|
84
|
-
- `technique`: Design patterns and methods
|
|
63
|
+
You have access to 17 built-in entity types. Any entity type can live in any collection.
|
|
64
|
+
|
|
65
|
+
**Identity Entities:**
|
|
66
|
+
- `person`: Team members, client contacts, any individual (status: current/former/contractor/client/partner)
|
|
67
|
+
- `organization`: Clients, vendors, partners, prospects (type: client/vendor/partner/prospect/industry-body; status: active/inactive/prospect/former)
|
|
68
|
+
- `role`: Role definitions from leveling framework (title, department, level, type: staff/contractor/intern)
|
|
85
69
|
- `practice-area`: Firm capabilities and disciplines (e.g. Data Visualization, UX Design)
|
|
86
|
-
- `case-study`: Portfolio narratives for completed projects (objective, solution, outcome, team, press, awards)
|
|
87
70
|
|
|
88
|
-
**
|
|
89
|
-
- `
|
|
90
|
-
- `
|
|
71
|
+
**Universal Entities:**
|
|
72
|
+
- `project`: Client engagements and initiatives (type: client-project/internal-initiative/event/research)
|
|
73
|
+
- `meeting`: Any scheduled gathering (type: internal/client/workshop/conference/industry-event)
|
|
74
|
+
- `decision`: Structured decision records (ADR-style)
|
|
75
|
+
- `task`: Action items and to-dos (status: open/in-progress/done/cancelled)
|
|
76
|
+
- `document`: Any authored document (type: proposal/contract/brief/memo/financial-plan/template/report)
|
|
77
|
+
- `dataset`: Structured tabular data with typed columns
|
|
78
|
+
- `reference`: External resources and inspiration (type: article/video/tool/technique/framework/website)
|
|
79
|
+
- `note`: Freeform thinking (type: research/scratch/daily/brainstorm/draft)
|
|
80
|
+
- `deliverable`: Contracted outputs promised to a client
|
|
81
|
+
- `publication`: Content published externally (type: article/social-post/case-study-writeup/talk/podcast/award-submission)
|
|
82
|
+
|
|
83
|
+
**Knowledge Entities** (typically in resource collections):
|
|
84
|
+
- `process`: Workflows, SOPs, methodologies
|
|
85
|
+
- `standard`: Guidelines and best practices (category: accessibility/design-principles/code-standards)
|
|
86
|
+
- `case-study`: Portfolio narratives for completed work
|
|
91
87
|
|
|
92
|
-
**Deal lifecycle:** `
|
|
88
|
+
**Deal lifecycle:** `organization` (status: prospect) + `person` contacts → `document` (type: proposal) → won → `project` → `deliverable`
|
|
93
89
|
|
|
94
|
-
##
|
|
90
|
+
## Entity Placement
|
|
95
91
|
|
|
96
|
-
When
|
|
92
|
+
When creating entities, follow these rules:
|
|
97
93
|
|
|
98
94
|
**Confirm before writing:**
|
|
99
|
-
Unless the user has explicitly specified where to put an
|
|
95
|
+
Unless the user has explicitly specified where to put an entity, always confirm the inferred collection before creating it. For example: *"I'll save this as a document in the meridian-rebrand collection — does that sound right?"* Wait for confirmation before calling `create_entity`.
|
|
96
|
+
|
|
97
|
+
**Collection routing:**
|
|
98
|
+
- Related to a specific project → that project's collection
|
|
99
|
+
- Team-wide reusable content (processes, standards) → a resource collection
|
|
100
|
+
- Business operations → a function collection
|
|
101
|
+
- Identity entities (person, organization) → wherever makes sense for the team. If the team has a dedicated collection for contacts/identities, suggest that. Otherwise, put them in the relevant project collection.
|
|
102
|
+
|
|
103
|
+
**Deduplication:** Entity IDs must be unique across the entire workspace. If you try to create an entity with an ID that already exists in another collection, the system will reject it. Use `[[wikilinks]]` to reference existing entities instead of recreating them.
|
|
100
104
|
|
|
101
|
-
**
|
|
102
|
-
- Related to a deal or proposal → the function repo containing that deal (e.g. `new-business/`)
|
|
103
|
-
- Related to a specific project → that project's repo
|
|
104
|
-
- Team-wide reusable output → shared resource repo
|
|
105
|
+
**Helping teams organize:** When the user needs a new collection (e.g. starting a new project), guide them to create one. Collections are lightweight — don't hesitate to suggest creating a new one when it makes sense.
|
|
105
106
|
|
|
106
107
|
**Privacy — `private/` vs. visibility field:**
|
|
107
108
|
|
|
@@ -109,23 +110,23 @@ These are two different mechanisms. Do not confuse them:
|
|
|
109
110
|
|
|
110
111
|
| | `repo: "private"` | `visibility: admin/restricted` |
|
|
111
112
|
|---|---|---|
|
|
112
|
-
| What it means | File stays on this machine only, never committed | File is committed but access-controlled in the
|
|
113
|
+
| What it means | File stays on this machine only, never committed | File is committed but access-controlled in the collection |
|
|
113
114
|
| Use when | "Make it private" / draft / sensitive / not ready to share | Committed file that only certain roles should see |
|
|
114
115
|
|
|
115
116
|
When a user says "make it private", "keep this to myself", "don't share this", or "just for me" → use `repo: "private"`. Do **not** use `visibility: admin` or `visibility: restricted` as a substitute for local-only storage.
|
|
116
117
|
|
|
117
|
-
- If a draft or sensitive
|
|
118
|
-
- When unsure, ask: *"Should this stay private on your machine, or be committed to the team
|
|
118
|
+
- If a draft or sensitive entity should stay local → `repo: "private"`
|
|
119
|
+
- When unsure, ask: *"Should this stay private on your machine, or be committed to the team collection with restricted access?"*
|
|
119
120
|
- Private entities can wikilink to public entities
|
|
120
121
|
- Files in `private/` do not appear in workspace-wide `list_entities` — use `search_entities` with `repoNames: ["private"]` to retrieve them
|
|
121
122
|
- Never suggest committing or pushing anything from `private/`
|
|
122
123
|
|
|
123
124
|
**Entity type for generated content:**
|
|
124
|
-
- Reports, assessments, summaries, email drafts, briefs, analyses → use `
|
|
125
|
-
-
|
|
125
|
+
- Reports, assessments, summaries, email drafts, briefs, analyses → use `document` (type field: `"report"`, `"brief"`, `"memo"`, etc.)
|
|
126
|
+
- Freeform thinking, research, scratch notes → use `note`
|
|
126
127
|
|
|
127
128
|
**Content format:**
|
|
128
|
-
- Text
|
|
129
|
+
- Text content → markdown body of the entity
|
|
129
130
|
- Binary or externally-hosted files → `url` field pointing to R2 URL or local path
|
|
130
131
|
|
|
131
132
|
## Interaction Patterns
|
|
@@ -154,37 +155,24 @@ You have access to tools in the following categories:
|
|
|
154
155
|
|
|
155
156
|
**Entity Management** — CRUD operations on knowledge graph entities, wikilink traversal, search, schema queries, datasets, and linting.
|
|
156
157
|
|
|
157
|
-
**
|
|
158
|
+
**External Connectors** — Query external services (Linear, Slack, Pipedrive, Granola, etc.) on demand via `connector_list` and `connector_call`. Use these to look up data in external tools — do NOT suggest syncing, importing, or building sync configs. Connectors are for live queries only.
|
|
158
159
|
|
|
159
|
-
**
|
|
160
|
-
|
|
161
|
-
**Workspace Git** — Check uncommitted changes, review diffs, and commit across all workspace repos. Use these when users ask about pending changes or want to commit.
|
|
160
|
+
**Workspace Git** — Check uncommitted changes, review diffs, and commit across all workspace collections. Use these when users ask about pending changes or want to commit.
|
|
162
161
|
|
|
163
162
|
**Skills** — Load domain-specific guidance on demand (see "Available Skills" below).
|
|
164
163
|
|
|
165
164
|
### Tool Selection
|
|
166
165
|
|
|
167
166
|
**IMPORTANT — match user intent to the right tool category:**
|
|
168
|
-
- "source config", "sync config", "field map", "mappings" → `sync_list_sources` (NOT entity search)
|
|
169
167
|
- "uncommitted changes", "what changed", "pending changes" → `workspace_status`
|
|
170
168
|
- "show diff", "review changes" → `workspace_review`
|
|
171
169
|
- "commit", "save changes" → `workspace_commit`
|
|
172
|
-
- Source configs are NOT entities — they live in `.studiograph/sources/` and are accessed via sync tools, not entity tools.
|
|
173
170
|
|
|
174
171
|
### Tool Reference
|
|
175
172
|
|
|
176
173
|
{{TOOL_REFERENCE}}
|
|
177
174
|
|
|
178
|
-
Use these tools to help users build
|
|
179
|
-
|
|
180
|
-
## Deployment
|
|
181
|
-
|
|
182
|
-
The workspace may be deployed to Railway as a hosted server. Key facts:
|
|
183
|
-
|
|
184
|
-
- **Pushing does not auto-deploy.** `workspace_push` sends commits to GitHub, but Railway does NOT automatically pull or redeploy. You must call `redeploy_railway` after pushing to update the deployed server.
|
|
185
|
-
- **The deploy flow is: commit → push → redeploy.** Always follow this sequence when the user wants changes live on the server.
|
|
186
|
-
- **Credentials are stored locally.** Railway token lives in `~/.studiograph/user.json`, GitHub PAT in `~/.studiograph/auth.json`. The deploy and redeploy tools read these automatically — do not ask the user for tokens unless they are genuinely missing.
|
|
187
|
-
- **First-time setup** uses `deploy_railway`. **Subsequent updates** use `redeploy_railway` (zero parameters).
|
|
175
|
+
Use these tools to help users build and navigate their knowledge graph effectively.
|
|
188
176
|
|
|
189
177
|
## Remember
|
|
190
178
|
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { existsSync, readdirSync, readFileSync } from 'fs';
|
|
21
21
|
import { join, extname, basename } from 'path';
|
|
22
|
+
// Skills gated for MVP — re-enable when sync pipeline is production-ready
|
|
23
|
+
const GATED_SKILLS = new Set(['sync-setup', 'sync-configuration', 'enrich-entities', 'obsidian-source-setup']);
|
|
22
24
|
/**
|
|
23
25
|
* Minimal YAML frontmatter parser — handles the subset used by skills.
|
|
24
26
|
*/
|
|
@@ -68,6 +70,9 @@ export function loadSkillIndex(skillsDirs) {
|
|
|
68
70
|
const content = readFileSync(skillMd, 'utf-8');
|
|
69
71
|
const { meta } = parseFrontmatter(content);
|
|
70
72
|
const name = meta.name || entry;
|
|
73
|
+
// Skip sync/enrich skills for MVP
|
|
74
|
+
if (GATED_SKILLS.has(name))
|
|
75
|
+
continue;
|
|
71
76
|
if (!seen.has(name)) {
|
|
72
77
|
seen.add(name);
|
|
73
78
|
skills.push({
|
|
@@ -94,6 +99,9 @@ export function loadSkillIndex(skillsDirs) {
|
|
|
94
99
|
if (!meta.name && !meta.description)
|
|
95
100
|
continue;
|
|
96
101
|
const name = meta.name || basename(entry, '.md');
|
|
102
|
+
// Skip sync/enrich skills for MVP
|
|
103
|
+
if (GATED_SKILLS.has(name))
|
|
104
|
+
continue;
|
|
97
105
|
if (!seen.has(name)) {
|
|
98
106
|
seen.add(name);
|
|
99
107
|
skills.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../src/agent/skill-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAW/
|
|
1
|
+
{"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../src/agent/skill-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -418,21 +418,6 @@ Structured tabular data with CSV body.
|
|
|
418
418
|
|
|
419
419
|
Each column: `{ name, type: "string"|"number"|"boolean"|"date", required?, description? }`
|
|
420
420
|
|
|
421
|
-
### deck
|
|
422
|
-
|
|
423
|
-
Presentation deck (Schema Slides app plugin). Body is slide markdown.
|
|
424
|
-
|
|
425
|
-
| Field | Type | Required | Description |
|
|
426
|
-
|-------|------|----------|-------------|
|
|
427
|
-
| `title` | string | Yes | Deck title |
|
|
428
|
-
| `client` | string | No | Client |
|
|
429
|
-
| `date` | string | Yes | Date |
|
|
430
|
-
| `phase` | string | No | Phase |
|
|
431
|
-
| `theme` | enum | No | `dark` (default) \| `light` |
|
|
432
|
-
| `status` | enum | No | `draft` (default) \| `review` \| `approved` |
|
|
433
|
-
| `related_project` | string | No | Project wikilink |
|
|
434
|
-
| `related_client` | string | No | Client wikilink |
|
|
435
|
-
|
|
436
421
|
---
|
|
437
422
|
|
|
438
423
|
## File Layout
|
|
@@ -467,15 +452,15 @@ related_areas:
|
|
|
467
452
|
- "[[ux-design]]"
|
|
468
453
|
- "[[design-engineering]]"
|
|
469
454
|
team:
|
|
470
|
-
- "[[
|
|
471
|
-
- "[[
|
|
455
|
+
- "[[alice-smith]]"
|
|
456
|
+
- "[[jamie-torres]]"
|
|
472
457
|
tags:
|
|
473
458
|
- website
|
|
474
459
|
- redesign
|
|
475
460
|
created_at: "2026-01-15T00:00:00Z"
|
|
476
461
|
updated_at: "2026-02-20T00:00:00Z"
|
|
477
|
-
created_by:
|
|
478
|
-
updated_by:
|
|
462
|
+
created_by: alice-smith
|
|
463
|
+
updated_by: alice-smith
|
|
479
464
|
---
|
|
480
465
|
|
|
481
466
|
# Acme Website Redesign
|
|
@@ -12,7 +12,7 @@ When a user references a specific named entity in their request, gather full con
|
|
|
12
12
|
|
|
13
13
|
User mentions a specific entity by name:
|
|
14
14
|
- "Help me write a proposal for Acme"
|
|
15
|
-
- "
|
|
15
|
+
- "Write a case study for the Acme project"
|
|
16
16
|
- "What's the status of the Meridian Health deliverables?"
|
|
17
17
|
- "Find all open tasks for the Terra Finance project"
|
|
18
18
|
|
|
@@ -15,12 +15,28 @@ You can sync data from external sources (Linear, Pipedrive, Granola, Obsidian, e
|
|
|
15
15
|
> "You'll need to set up the connector first. Run `studiograph connector add <name>` in your terminal."
|
|
16
16
|
3. **Add the source:** `sync_setup_source({ name: "linear" })` — uses default mappings from built-in definitions when available
|
|
17
17
|
4. **Customize if needed:** Built-in definitions (Pipedrive, Granola, Linear, Asana) provide ready-to-use defaults. To customize, pass `entity_mappings` to `sync_setup_source` to override field maps, add co-location, change target repos, or add status maps. See the `sync-configuration` skill for field map syntax and options.
|
|
18
|
-
5. **No built-in definition?**
|
|
18
|
+
5. **No built-in definition?** Use `sync_inspect_connector` to discover the connector's tools and syncable entity types, then `sync_sample_data` to fetch a sample record and see field shapes. Build `entity_mappings` from the field analysis. See below and the `sync-configuration` skill for the full mapping schema.
|
|
19
19
|
6. **Run the sync:** `sync_run({ sources: ["linear"] })`
|
|
20
20
|
7. **Review staging:** `sync_status` — show the user what will be committed
|
|
21
21
|
8. **Apply on confirmation:** Only call `sync_apply` after the user approves
|
|
22
22
|
9. **Review & commit:** `studiograph review` (interactive diff review with approve/reject per entity), then `studiograph commit` (git commit across all repos)
|
|
23
23
|
|
|
24
|
+
## Building a Config from Scratch (no built-in definition)
|
|
25
|
+
|
|
26
|
+
When a connector has no built-in source definition, use introspection to auto-discover the data model:
|
|
27
|
+
|
|
28
|
+
1. `sync_inspect_connector({ connector: "myservice" })` — lists all tools categorized by purpose, detects syncable entity types with list/get tool pairs
|
|
29
|
+
2. Pick which entity types to sync from the `syncableTypes` results
|
|
30
|
+
3. `sync_sample_data({ connector: "myservice", tool: "list_records" })` — fetches one record and analyzes field shapes. Returns field paths, types, sample values, and suggested field_map entries
|
|
31
|
+
4. Build `entity_mappings` using the field analysis — map source fields to entity schema fields using dot notation for nested fields
|
|
32
|
+
5. `sync_setup_source({ name: "myservice", entity_mappings: [...] })` — save the config
|
|
33
|
+
|
|
34
|
+
**Tips:**
|
|
35
|
+
- `sync_sample_data` auto-sets `limit: 1` — you don't need to pass it
|
|
36
|
+
- Use the `suggestedFieldMap` from the response as a starting point
|
|
37
|
+
- Nested fields use dot notation in field_map keys (e.g. `"org_id.name": "organization"`)
|
|
38
|
+
- Call `sync_sample_data` for each entity type you plan to sync
|
|
39
|
+
|
|
24
40
|
## Modifying an Existing Source
|
|
25
41
|
|
|
26
42
|
When a user asks to adjust, change, or view a source config, **immediately call `sync_list_sources`** to read the current configuration. Do not ask the user to paste the config — you can read it yourself.
|
|
@@ -21,11 +21,17 @@ export declare function wrapToolResult(result: any): {
|
|
|
21
21
|
/**
|
|
22
22
|
* Create graph tools for the agent
|
|
23
23
|
*/
|
|
24
|
+
export interface MutationEvent {
|
|
25
|
+
action: 'created' | 'updated' | 'deleted';
|
|
26
|
+
repo: string;
|
|
27
|
+
entityType: string;
|
|
28
|
+
entityId: string;
|
|
29
|
+
}
|
|
24
30
|
export declare function createGraphTools(workspaceManager: WorkspaceManager, gitUser: {
|
|
25
31
|
id: string;
|
|
26
32
|
name: string;
|
|
27
33
|
email: string;
|
|
28
|
-
}, workspacePath?: string): ({
|
|
34
|
+
}, workspacePath?: string, onHighlight?: (ids: string[]) => void, onMutation?: (m: MutationEvent) => void): ({
|
|
29
35
|
name: string;
|
|
30
36
|
label: string;
|
|
31
37
|
description: string;
|
|
@@ -37,6 +43,24 @@ export declare function createGraphTools(workspaceManager: WorkspaceManager, git
|
|
|
37
43
|
}[];
|
|
38
44
|
details: any;
|
|
39
45
|
}>;
|
|
46
|
+
} | {
|
|
47
|
+
name: string;
|
|
48
|
+
label: string;
|
|
49
|
+
description: string;
|
|
50
|
+
parameters: import("@sinclair/typebox").TObject<{
|
|
51
|
+
name: import("@sinclair/typebox").TString;
|
|
52
|
+
description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
53
|
+
}>;
|
|
54
|
+
execute: (toolCallId: string, params: {
|
|
55
|
+
name: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
}) => Promise<{
|
|
58
|
+
content: {
|
|
59
|
+
type: "text";
|
|
60
|
+
text: string;
|
|
61
|
+
}[];
|
|
62
|
+
details: any;
|
|
63
|
+
}>;
|
|
40
64
|
} | {
|
|
41
65
|
name: string;
|
|
42
66
|
label: string;
|
|
@@ -55,4 +79,20 @@ export declare function createGraphTools(workspaceManager: WorkspaceManager, git
|
|
|
55
79
|
}[];
|
|
56
80
|
details: any;
|
|
57
81
|
}>;
|
|
82
|
+
} | {
|
|
83
|
+
name: string;
|
|
84
|
+
label: string;
|
|
85
|
+
description: string;
|
|
86
|
+
parameters: import("@sinclair/typebox").TObject<{
|
|
87
|
+
entityIds: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
88
|
+
}>;
|
|
89
|
+
execute: (_toolCallId: string, params: {
|
|
90
|
+
entityIds: string[];
|
|
91
|
+
}) => Promise<{
|
|
92
|
+
content: {
|
|
93
|
+
type: "text";
|
|
94
|
+
text: string;
|
|
95
|
+
}[];
|
|
96
|
+
details: any;
|
|
97
|
+
}>;
|
|
58
98
|
})[];
|