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.
Files changed (205) hide show
  1. package/README.md +13 -18
  2. package/dist/agent/orchestrator.d.ts +57 -0
  3. package/dist/agent/orchestrator.js +169 -22
  4. package/dist/agent/orchestrator.js.map +1 -1
  5. package/dist/agent/prompts/system.md +51 -63
  6. package/dist/agent/skill-loader.js +8 -0
  7. package/dist/agent/skill-loader.js.map +1 -1
  8. package/dist/agent/skills/entity-schema.md +4 -19
  9. package/dist/agent/skills/gather-context.md +1 -1
  10. package/dist/agent/skills/sync-setup.md +17 -1
  11. package/dist/agent/tools/graph-tools.d.ts +41 -1
  12. package/dist/agent/tools/graph-tools.js +133 -57
  13. package/dist/agent/tools/graph-tools.js.map +1 -1
  14. package/dist/agent/tools/ops-tools.js +82 -0
  15. package/dist/agent/tools/ops-tools.js.map +1 -1
  16. package/dist/agent/tools/permission-tools.d.ts +90 -0
  17. package/dist/agent/tools/permission-tools.js +207 -0
  18. package/dist/agent/tools/permission-tools.js.map +1 -0
  19. package/dist/agent/tools/sync-tools.d.ts +9 -1
  20. package/dist/agent/tools/sync-tools.js +259 -3
  21. package/dist/agent/tools/sync-tools.js.map +1 -1
  22. package/dist/auth/github.d.ts +1 -1
  23. package/dist/auth/github.js +21 -13
  24. package/dist/auth/github.js.map +1 -1
  25. package/dist/cli/commands/access.d.ts +11 -0
  26. package/dist/cli/commands/access.js +156 -0
  27. package/dist/cli/commands/access.js.map +1 -0
  28. package/dist/cli/commands/app.js +25 -2
  29. package/dist/cli/commands/app.js.map +1 -1
  30. package/dist/cli/commands/clear.d.ts +5 -0
  31. package/dist/cli/commands/clear.js +36 -0
  32. package/dist/cli/commands/clear.js.map +1 -0
  33. package/dist/cli/commands/clone.js +3 -3
  34. package/dist/cli/commands/clone.js.map +1 -1
  35. package/dist/cli/commands/collection.d.ts +10 -0
  36. package/dist/cli/commands/collection.js +187 -0
  37. package/dist/cli/commands/collection.js.map +1 -0
  38. package/dist/cli/commands/commit.js +2 -1
  39. package/dist/cli/commands/commit.js.map +1 -1
  40. package/dist/cli/commands/config.d.ts +100 -0
  41. package/dist/cli/commands/config.js +1 -1
  42. package/dist/cli/commands/config.js.map +1 -1
  43. package/dist/cli/commands/deploy.js +10 -1
  44. package/dist/cli/commands/deploy.js.map +1 -1
  45. package/dist/cli/commands/index.js +1 -1
  46. package/dist/cli/commands/index.js.map +1 -1
  47. package/dist/cli/commands/init.js +32 -40
  48. package/dist/cli/commands/init.js.map +1 -1
  49. package/dist/cli/commands/join.d.ts +0 -6
  50. package/dist/cli/commands/join.js +26 -111
  51. package/dist/cli/commands/join.js.map +1 -1
  52. package/dist/cli/commands/lint.js +1 -2
  53. package/dist/cli/commands/lint.js.map +1 -1
  54. package/dist/cli/commands/mcp.js +6 -5
  55. package/dist/cli/commands/mcp.js.map +1 -1
  56. package/dist/cli/commands/org.d.ts +10 -0
  57. package/dist/cli/commands/org.js +132 -0
  58. package/dist/cli/commands/org.js.map +1 -0
  59. package/dist/cli/commands/orphans.js +1 -2
  60. package/dist/cli/commands/orphans.js.map +1 -1
  61. package/dist/cli/commands/provision.js +3 -3
  62. package/dist/cli/commands/provision.js.map +1 -1
  63. package/dist/cli/commands/resolve.d.ts +8 -0
  64. package/dist/cli/commands/resolve.js +85 -0
  65. package/dist/cli/commands/resolve.js.map +1 -0
  66. package/dist/cli/commands/serve.js +55 -25
  67. package/dist/cli/commands/serve.js.map +1 -1
  68. package/dist/cli/commands/start.js +25 -206
  69. package/dist/cli/commands/start.js.map +1 -1
  70. package/dist/cli/commands/sync.js +53 -8
  71. package/dist/cli/commands/sync.js.map +1 -1
  72. package/dist/cli/commands/team.d.ts +12 -0
  73. package/dist/cli/commands/team.js +185 -0
  74. package/dist/cli/commands/team.js.map +1 -0
  75. package/dist/cli/index.js +41 -34
  76. package/dist/cli/index.js.map +1 -1
  77. package/dist/cli/scaffolding.d.ts +5 -3
  78. package/dist/cli/scaffolding.js +191 -97
  79. package/dist/cli/scaffolding.js.map +1 -1
  80. package/dist/cli/setup-wizard.js +20 -10
  81. package/dist/cli/setup-wizard.js.map +1 -1
  82. package/dist/cli/sync-review-interactive.js +1 -1
  83. package/dist/cli/sync-review-interactive.js.map +1 -1
  84. package/dist/core/graph.d.ts +7 -10
  85. package/dist/core/graph.js +88 -89
  86. package/dist/core/graph.js.map +1 -1
  87. package/dist/core/types.d.ts +19 -34
  88. package/dist/core/types.js +3 -21
  89. package/dist/core/types.js.map +1 -1
  90. package/dist/core/user-config.d.ts +27 -0
  91. package/dist/core/user-config.js +51 -0
  92. package/dist/core/user-config.js.map +1 -1
  93. package/dist/core/validation.d.ts +978 -2182
  94. package/dist/core/validation.js +242 -397
  95. package/dist/core/validation.js.map +1 -1
  96. package/dist/core/workspace-manager.d.ts +32 -31
  97. package/dist/core/workspace-manager.js +171 -186
  98. package/dist/core/workspace-manager.js.map +1 -1
  99. package/dist/core/workspace.d.ts +0 -5
  100. package/dist/core/workspace.js +33 -101
  101. package/dist/core/workspace.js.map +1 -1
  102. package/dist/lib/lib/utils.d.ts +2 -0
  103. package/dist/lib/lib/utils.js +6 -0
  104. package/dist/lib/lib/utils.js.map +1 -0
  105. package/dist/mcp/tools.js +13 -13
  106. package/dist/mcp/tools.js.map +1 -1
  107. package/dist/server/chrome/chrome.css +562 -0
  108. package/dist/server/chrome/chrome.js +540 -0
  109. package/dist/server/index.js +163 -10
  110. package/dist/server/index.js.map +1 -1
  111. package/dist/server/plugin-loader.d.ts +7 -0
  112. package/dist/server/plugin-loader.js +9 -1
  113. package/dist/server/plugin-loader.js.map +1 -1
  114. package/dist/server/routes/chat.d.ts +3 -2
  115. package/dist/server/routes/chat.js +67 -16
  116. package/dist/server/routes/chat.js.map +1 -1
  117. package/dist/server/routes/git-api.d.ts +9 -0
  118. package/dist/server/routes/git-api.js +82 -0
  119. package/dist/server/routes/git-api.js.map +1 -0
  120. package/dist/server/routes/graph-api.d.ts +2 -2
  121. package/dist/server/routes/graph-api.js +267 -3
  122. package/dist/server/routes/graph-api.js.map +1 -1
  123. package/dist/server/routes/permissions-api.d.ts +9 -0
  124. package/dist/server/routes/permissions-api.js +176 -0
  125. package/dist/server/routes/permissions-api.js.map +1 -0
  126. package/dist/server/routes/workspace-api.d.ts +9 -0
  127. package/dist/server/routes/workspace-api.js +283 -0
  128. package/dist/server/routes/workspace-api.js.map +1 -0
  129. package/dist/services/assets/base.d.ts +2 -2
  130. package/dist/services/assets/base.js +4 -4
  131. package/dist/services/assets/base.js.map +1 -1
  132. package/dist/services/assets/index.d.ts +6 -6
  133. package/dist/services/assets/index.js +12 -12
  134. package/dist/services/assets/index.js.map +1 -1
  135. package/dist/services/git.d.ts +35 -0
  136. package/dist/services/git.js +93 -0
  137. package/dist/services/git.js.map +1 -1
  138. package/dist/services/github-provisioner.js +1 -2
  139. package/dist/services/github-provisioner.js.map +1 -1
  140. package/dist/services/github-service.d.ts +99 -0
  141. package/dist/services/github-service.js +310 -0
  142. package/dist/services/github-service.js.map +1 -0
  143. package/dist/services/markdown.js +4 -9
  144. package/dist/services/markdown.js.map +1 -1
  145. package/dist/services/memory-service.d.ts +4 -0
  146. package/dist/services/memory-service.js +13 -1
  147. package/dist/services/memory-service.js.map +1 -1
  148. package/dist/services/sync/commit.d.ts +2 -0
  149. package/dist/services/sync/commit.js +21 -6
  150. package/dist/services/sync/commit.js.map +1 -1
  151. package/dist/services/sync/graphrag-indexer.js +2 -2
  152. package/dist/services/sync/graphrag-indexer.js.map +1 -1
  153. package/dist/utils/git.d.ts +5 -0
  154. package/dist/utils/git.js +10 -0
  155. package/dist/utils/git.js.map +1 -1
  156. package/dist/utils/merge-resolver.d.ts +33 -8
  157. package/dist/utils/merge-resolver.js +157 -55
  158. package/dist/utils/merge-resolver.js.map +1 -1
  159. package/dist/utils/preflight.d.ts +1 -1
  160. package/dist/utils/preflight.js +1 -1
  161. package/dist/web/_app/env.js +1 -0
  162. package/dist/web/_app/immutable/assets/0.CDbX4Cwz.css +1 -0
  163. package/dist/web/_app/immutable/assets/2.DRHi7ABa.css +1 -0
  164. package/dist/web/_app/immutable/assets/3.BJy7pVXi.css +1 -0
  165. package/dist/web/_app/immutable/assets/4.Ad16uh9o.css +1 -0
  166. package/dist/web/_app/immutable/assets/5.BhKgiXd2.css +1 -0
  167. package/dist/web/_app/immutable/assets/6.CeHKR5ZY.css +1 -0
  168. package/dist/web/_app/immutable/assets/AppShell.CXdE5aqF.css +1 -0
  169. package/dist/web/_app/immutable/assets/ChatPanel.RFD5GGYI.css +1 -0
  170. package/dist/web/_app/immutable/assets/editor.CPAf2SRV.css +1 -0
  171. package/dist/web/_app/immutable/chunks/3_5VIr68.js +1 -0
  172. package/dist/web/_app/immutable/chunks/4QY4j-jX.js +1 -0
  173. package/dist/web/_app/immutable/chunks/B0nldqWF.js +23 -0
  174. package/dist/web/_app/immutable/chunks/BB_5th5W.js +3383 -0
  175. package/dist/web/_app/immutable/chunks/BButMJ6M.js +1 -0
  176. package/dist/web/_app/immutable/chunks/BiubvAUI.js +2 -0
  177. package/dist/web/_app/immutable/chunks/CAXuTUkp.js +1 -0
  178. package/dist/web/_app/immutable/chunks/CUzqHQY_.js +1 -0
  179. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +1 -0
  180. package/dist/web/_app/immutable/chunks/CqkleIqs.js +1 -0
  181. package/dist/web/_app/immutable/chunks/DPmdIe6Y.js +1 -0
  182. package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +18 -0
  183. package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +5 -0
  184. package/dist/web/_app/immutable/chunks/DsERsGWg.js +64 -0
  185. package/dist/web/_app/immutable/chunks/DtVH--hH.js +6 -0
  186. package/dist/web/_app/immutable/chunks/F20aIBpJ.js +1 -0
  187. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +1 -0
  188. package/dist/web/_app/immutable/chunks/WSUKABI_.js +1 -0
  189. package/dist/web/_app/immutable/chunks/YFT1281h.js +2 -0
  190. package/dist/web/_app/immutable/chunks/aosHekRC.js +1 -0
  191. package/dist/web/_app/immutable/chunks/fwnBoL5x.js +1 -0
  192. package/dist/web/_app/immutable/chunks/hHxe9oXh.js +1 -0
  193. package/dist/web/_app/immutable/chunks/nZKqDQ0w.js +6 -0
  194. package/dist/web/_app/immutable/entry/app.B6Ngvu5P.js +2 -0
  195. package/dist/web/_app/immutable/entry/start.NykKAKQv.js +1 -0
  196. package/dist/web/_app/immutable/nodes/0.DQ5KdeNU.js +1 -0
  197. package/dist/web/_app/immutable/nodes/1.BR6DZ9ov.js +1 -0
  198. package/dist/web/_app/immutable/nodes/2.COSjVZ_C.js +1 -0
  199. package/dist/web/_app/immutable/nodes/3.B9r1XIlO.js +1 -0
  200. package/dist/web/_app/immutable/nodes/4.p-c6hlFf.js +16 -0
  201. package/dist/web/_app/immutable/nodes/5.CPc-Bqal.js +4 -0
  202. package/dist/web/_app/immutable/nodes/6.jJ67YnBc.js +2 -0
  203. package/dist/web/_app/version.json +1 -0
  204. package/dist/web/index.html +43 -0
  205. 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 repositories
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. source configs, workspace status, entity data)
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 the following entity types:
59
-
60
- **Project Repos:**
61
- - `project`: Client engagements with timelines and deliverables
62
- - `meeting`: Dated events with attendees, notes, decisions
63
- - `decision`: Structured decision records (DEC-YYYY-NNN format)
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
- **App Types:**
89
- - `dataset`: Tabular data with a declared column schema (name, type, required). Body is raw CSV. Use for time tracking, budgets, rosters, inventories.
90
- - `deck`: Presentation deck entity (rendered by the Schema Slides app)
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:** `client` (status: prospect) + `person` contacts → `deal` `proposal` documents → won → `project` → `deliverable` → `artifact[]`
88
+ **Deal lifecycle:** `organization` (status: prospect) + `person` contacts → `document` (type: proposal) → won → `project` → `deliverable`
93
89
 
94
- ## Artifact Placement
90
+ ## Entity Placement
95
91
 
96
- When you create or file an artifact, follow these rules:
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 artifact, always confirm the inferred location before creating it. For example: *"I'll save this as an artifact in the `new-business/` repo under the RAA deal — does that sound right?"* Wait for confirmation before calling `create_entity`.
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
- **Repo selection:**
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 repo |
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 artifact should stay local → `repo: "private"`, `entityType: "artifact"`
118
- - When unsure, ask: *"Should this stay private on your machine, or be committed to the team repo with restricted access?"*
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 `artifact` (type field: `"report"`, `"brief"`, etc.)
125
- - Do not probe for unknown entity types (assessment, report, note, document, etc.) they don't exist. `artifact` is the correct type for any generated document.
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 artifacts (email drafts, briefs, summaries) content in the markdown body of the artifact entity
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
- **Data Sync** — Import data from external sources (Pipedrive, Linear, Granola, Obsidian, etc.) through the sync pipeline: extract reconcile stage apply.
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
- **Enrichment** — LLM-powered enrichment of sparse entities using cross-source context.
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, navigate, and synchronize their knowledge graph effectively.
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":"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"}
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;AAE/C,0EAA0E;AAC1E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAW/G;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,UAAoB;IACjD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAE/B,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAEnC,oDAAoD;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;oBAChC,kCAAkC;oBAClC,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;wBAAE,SAAS;oBACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACf,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI;4BACJ,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;4BACnC,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;4BACzD,GAAG,EAAE,SAAS;4BACd,UAAU,EAAE,OAAO;4BACnB,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;gBACD,SAAS;YACX,CAAC;YAED,+DAA+D;YAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACjD,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAC3C,uDAAuD;oBACvD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW;wBAAE,SAAS;oBAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACjD,kCAAkC;oBAClC,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;wBAAE,SAAS;oBACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACf,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI;4BACJ,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;4BACnC,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;4BACzD,GAAG;4BACH,UAAU,EAAE,SAAS;4BACrB,WAAW,EAAE,KAAK;yBACnB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAe,EAAE,IAAa;IAC7D,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,iBAAiB,IAAI,CAAC,IAAI,6CAA6C,CAAC;QACjF,CAAC;QACD,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,iCAAiC,IAAI,IAAI,CAAC;QACnD,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,oBAAoB,QAAQ,yBAAyB,IAAI,CAAC,IAAI,IAAI,CAAC;QAC5E,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAmB;IACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG;QACZ,qBAAqB;QACrB,EAAE;QACF,6FAA6F;QAC7F,EAAE;QACF,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;KAC3D,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;SAC7B,IAAI,CAAC,aAAa,CAAC,CAAC;AACzB,CAAC"}
@@ -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
- - "[[christian-schmidt]]"
471
- - "[[kenton-powell]]"
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: christian-schmidt
478
- updated_by: christian-schmidt
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
- - "Create a deck for the FII10 project"
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?** Guide the user through building `entity_mappings` from scratch choose extraction mode, define field maps, set target repo. Reference the `sync-configuration` skill for the full mapping schema.
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
  })[];