@owlmeans/viable-sdk 0.1.18-rc.21 → 0.1.18-rc.23
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 +1 -1
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/viable-sdk/SKILL.md +76 -21
- package/build/api/remote.d.ts +2 -3
- package/build/api/remote.d.ts.map +1 -1
- package/build/api/remote.js +13 -14
- package/build/api/remote.js.map +1 -1
- package/build/consts.d.ts +3 -13
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +3 -13
- package/build/consts.js.map +1 -1
- package/build/harness/templates.d.ts +2 -2
- package/build/harness/templates.d.ts.map +1 -1
- package/build/harness/templates.js +10 -10
- package/build/project/setup.d.ts +1 -1
- package/build/tools/catalogue.d.ts +2 -2
- package/build/tools/catalogue.d.ts.map +1 -1
- package/build/tools/catalogue.js +143 -142
- package/build/tools/catalogue.js.map +1 -1
- package/build/tools/index.d.ts +2 -1
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +2 -1
- package/build/tools/index.js.map +1 -1
- package/build/tools/mcp.d.ts +2 -2
- package/build/tools/mcp.d.ts.map +1 -1
- package/build/tools/mcp.js +15 -10
- package/build/tools/mcp.js.map +1 -1
- package/build/tools/platform.d.ts +27 -8
- package/build/tools/platform.d.ts.map +1 -1
- package/build/tools/platform.js +107 -42
- package/build/tools/platform.js.map +1 -1
- package/build/tools/refusal.d.ts +2 -2
- package/build/tools/refusal.d.ts.map +1 -1
- package/build/tools/refusal.js +22 -6
- package/build/tools/refusal.js.map +1 -1
- package/build/tools/settings.d.ts +45 -0
- package/build/tools/settings.d.ts.map +1 -0
- package/build/tools/settings.js +86 -0
- package/build/tools/settings.js.map +1 -0
- package/build/tools/status.d.ts +17 -0
- package/build/tools/status.d.ts.map +1 -0
- package/build/tools/status.js +104 -0
- package/build/tools/status.js.map +1 -0
- package/build/tools/stories.d.ts +19 -1
- package/build/tools/stories.d.ts.map +1 -1
- package/build/tools/stories.js +22 -1
- package/build/tools/stories.js.map +1 -1
- package/build/types.d.ts +34 -17
- package/build/types.d.ts.map +1 -1
- package/package.json +19 -19
- package/build/tools/jobs.d.ts +0 -12
- package/build/tools/jobs.d.ts.map +0 -1
- package/build/tools/jobs.js +0 -60
- package/build/tools/jobs.js.map +0 -1
package/README.md
CHANGED
|
@@ -93,7 +93,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
|
|
|
93
93
|
your project's skill store (`.agents/skills/`):
|
|
94
94
|
|
|
95
95
|
```sh
|
|
96
|
-
npx @owlmeans/agent-skills@^0.1.18-rc.
|
|
96
|
+
npx @owlmeans/agent-skills@^0.1.18-rc.31
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
The embedded files are version-matched to this package release. Do not edit them
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/viable-sdk",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-09-
|
|
4
|
+
"version": "0.1.18-rc.23",
|
|
5
|
+
"generatedAt": "2026-09-21T21:54:22.943Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -8,10 +8,10 @@ user-invocable: false
|
|
|
8
8
|
# @owlmeans/viable-sdk
|
|
9
9
|
|
|
10
10
|
**Layer:** Tooling (Node/Bun; not a browser or React package)
|
|
11
|
-
**Install:** `"@owlmeans/viable-sdk": "^0.1.18-rc.
|
|
11
|
+
**Install:** `"@owlmeans/viable-sdk": "^0.1.18-rc.23"` in `dependencies`
|
|
12
12
|
**Subpaths:** `.` · `./executor` · `./run` · `./tools` · `./task` · `./harness`
|
|
13
13
|
**Contracts:** `@owlmeans/viable-common` (`./connect`, `./slot`, `./integrity`, and the planning
|
|
14
|
-
vocabulary — story type
|
|
14
|
+
vocabulary — story type and story flow) and `@owlmeans/planning` (the planning protocol tree
|
|
15
15
|
and facade) — every name on the wire is declared there, so the SDK and the platform cannot spell one
|
|
16
16
|
differently.
|
|
17
17
|
|
|
@@ -31,10 +31,12 @@ machine, deliver its model calls to the parent agent, and run the generated appl
|
|
|
31
31
|
| `makeModelTaskDriver({ models })` · `TaskDriver` | A reference parent agent backed by a chat model (tests, CLIs) |
|
|
32
32
|
| `installHarness(dir, harness, opts?)` · `describeHarness(harness)` · `WORKING_RULE` | Set a coding agent up; preview it first |
|
|
33
33
|
| `catalogue` · `visibleTools(host)` · `toolByName` · `registerCatalogue(server, deps)` · `serverInstructions({ host })` | The tools and how they reach an MCP server |
|
|
34
|
-
| `
|
|
35
|
-
| `resolveStory(deps, projectId, ref)` · `storyQuery(projectId, filter?)` · `renderStories(items, page, total)` · `STORY_ORDER` | The story tools' reading of planning cards |
|
|
34
|
+
| `renderProjectStatus`, `renderStoryStatus(status, { landing? })`, `renderPipelineStatus`, `conversionNext` | Domain status as concise lines ending in the next valid action |
|
|
35
|
+
| `resolveStory(deps, projectId, ref)` · `storyQuery(projectId, filter?)` · `renderStories(items, page, total)` · `STORY_ORDER` · `isLandingStory(card)` · `LANDING_MARK` · `LANDING_NOTE` | The story tools' reading of planning cards |
|
|
36
|
+
| `PROJECT_SETTINGS` · `projectSettingOf(key)` · `settingsPatch(args)` · `renderProjectSettings(projectId, settings)` · `settingsReach(target)` | The project-settings tools: each setting's label and rule, the patch a call asks for, the rendering |
|
|
37
|
+
| `PLATFORM_CATALOGUE` (`pipelines`, `features`, `capabilities`) · `renderPlatform(catalogue, host)` · `GENERATED_SUMMARY` | What `describe_platform` renders, and the one-sentence product summary `describe_capabilities` ends with |
|
|
36
38
|
| `ToolHostKind` (`Stdio`/`Http`) · `ToolHost` · `ToolDeps` · `anyHost`/`localTarget`/`cloudTarget`/`withExecutor`/`delegatedLlm`/`sessionCapable`/`performsModelTasks` | The host description and the availability predicates |
|
|
37
|
-
| `./executor`: `makeLocalSlotExecutor(dir, opts?)`, `createLocalFileHelper`, `createLocalShellHelper`, `dispatchGitCommand`, `verifyTarget`/`forgetIntegrity`, `targetPaths`/`apiPath`/`webPath`/`workerPath`, `backendEnv`/`frontendEnv`, `classifyTargetHealth`/`readTargetHealth`, `runBootCheck`, `confineToProject`, the spawn helpers | The publisher's
|
|
39
|
+
| `./executor`: `makeLocalSlotExecutor(dir, opts?)`, `createLocalFileHelper`, `createLocalShellHelper`, `dispatchGitCommand`, `verifyTarget`/`forgetIntegrity`, `targetPaths`/`apiPath`/`webPath`/`workerPath`, `backendEnv`/`frontendEnv`, `classifyTargetHealth`/`readTargetHealth`, `runBootCheck`, `confineToProject`, the spawn helpers | The publisher's workload, on somebody's laptop |
|
|
38
40
|
| `./run`: `runLocal`, `stopLocal`, `localStatus`, `createLocalServer`, `startApi`/`startWorker`/`restartApi`/`stopProcess`, `readRun`/`writeRun`/`clearRun` | Building and running the generated app locally |
|
|
39
41
|
| `readMarker`/`writeMarker`/`discoverProject`/`isViableTree` · `readEnv`/`writeEnv`/`envStatus`/`replaceManagedBlock` | The `.viable/connect.json` marker and the managed `.env` block |
|
|
40
42
|
| `SdkError`, `SdkAuthError`, `SdkMisconfigured`, `SdkUnsupported` | Registered `ResilientError` classes |
|
|
@@ -125,19 +127,20 @@ tool a host cannot serve is a tool the parent tries once, is refused, and rememb
|
|
|
125
127
|
the list it reads is exactly the set of things that work for it. Predicates: `anyHost`,
|
|
126
128
|
`localTarget`, `cloudTarget`, `withExecutor`, `delegatedLlm`.
|
|
127
129
|
|
|
128
|
-
## 45 seconds is the ceiling,
|
|
130
|
+
## 45 seconds is the ceiling, so long operations return domain status
|
|
129
131
|
|
|
130
132
|
Every MCP host bounds a tool call and the strictest default in the field is sixty seconds (Codex).
|
|
131
133
|
`TOOL_DEADLINE_MS` leaves room for the round trip and keeps the connector inside every host's
|
|
132
134
|
ceiling without configuration. A tool that outlives its host's ceiling is reported to the user as a
|
|
133
135
|
**broken server**, and the true answer — the platform was slow — never reaches them.
|
|
134
136
|
|
|
135
|
-
|
|
136
|
-
`
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
Anything that takes minutes returns the owning domain's status and continues server-side.
|
|
138
|
+
`project_status`, `story_status`, `conversion_status` and `pipeline_status` compose the durable
|
|
139
|
+
records and run state a parent needs. `registerCatalogue` enforces the deadline per call and
|
|
140
|
+
converts a throw into an `isError` result the model can read and act on, because an exception
|
|
141
|
+
crossing the transport tells it only that something went wrong somewhere. Each status renderer
|
|
142
|
+
ends with a single `next:` line so the parent follows the domain workflow and does not invent a
|
|
143
|
+
polling strategy or treat a parked run as failed.
|
|
141
144
|
|
|
142
145
|
## The story tools speak planning
|
|
143
146
|
|
|
@@ -153,8 +156,8 @@ platform's in-process host. The scope a call answers for is the CREDENTIAL's; a
|
|
|
153
156
|
| `create_story` | `execute({ action: create, card: { kind: card, type: VIABLE_STORY_TYPE, parent, title, fields: { primary: false } } }, { wait: true, timeout: COMMIT_WAIT_MS })` |
|
|
154
157
|
| `update_story` | `resolveStory` → `execute({ card, action: update, changes: { title }, expectSeq: head ?? seq }, { wait: true, … })` |
|
|
155
158
|
| `delete_story` | `resolveStory` → `execute({ card, action: delete }, { wait: true, … })` → the project-lock poll |
|
|
156
|
-
| `develop_story` | `resolveStory` → `execute({ card, action: transit, transition: start }, { wait: true, … })`,
|
|
157
|
-
| `story_status` | `resolveStory` → the card
|
|
159
|
+
| `develop_story` | `resolveStory` → `execute({ card, action: transit, transition: start }, { wait: true, … })`, tolerating `CommitTimeout` → `story.status(project, card.id)` |
|
|
160
|
+
| `story_status` | `resolveStory` → the card, its development run, pending inquiry, warning and landing mark |
|
|
158
161
|
|
|
159
162
|
Rules the table rests on:
|
|
160
163
|
|
|
@@ -168,8 +171,7 @@ Rules the table rests on:
|
|
|
168
171
|
- **Development is the story's `start`, not a call of its own.** The platform begins the run once that
|
|
169
172
|
move COMMITS, and refuses it there too (the flow, one story in progress, the balance). The wait is
|
|
170
173
|
`COMMIT_WAIT_MS`, well inside the tool deadline; a late commit is not a failure — the transition is
|
|
171
|
-
durable — so `develop_story` answers from
|
|
172
|
-
job id is composed with viable-common's `jobIdOf`, the one spelling the platform answers under.
|
|
174
|
+
durable — so `develop_story` answers from `story_status` rather than outliving the host's ceiling.
|
|
173
175
|
- **A story a person writes goes as written, with no area.** Re-formatting the narrative and deciding
|
|
174
176
|
the area are the platform's, done in its planning middleware for the `connect` channel; a connector
|
|
175
177
|
that guessed an area would be a second answer. `update_story` carries only `title` and the head it
|
|
@@ -179,8 +181,16 @@ Rules the table rests on:
|
|
|
179
181
|
unlocked observations.
|
|
180
182
|
- **Stories are read in `order`, then `createdAt`**: `order` is the analysis's flow ordinal (a
|
|
181
183
|
connective story sits at a fraction between two steps). `renderStories` keeps the line shape a parent
|
|
182
|
-
already reads — `code · status[ · primary][ · area]` over the narrative — under a
|
|
183
|
-
page by intrinsic state.
|
|
184
|
+
already reads — `code · status[ · primary][ · landing gate][ · area]` over the narrative — under a
|
|
185
|
+
header counting the page by intrinsic state. A new fact is a new FLAG beside `primary`; the area
|
|
186
|
+
stays last.
|
|
187
|
+
- **The landing gate story is read off the card the tool already holds** (`fields.landing`, at most
|
|
188
|
+
one per project, decided by the platform at initialization — a connector never sets it). The list
|
|
189
|
+
flags it; `story_status` and `develop_story` pass the resolved card to `renderStoryStatus`, which
|
|
190
|
+
adds `LANDING_NOTE` under the status line, and their structured result gains `landing: true`. No
|
|
191
|
+
second call and no change to `connect.story.status`: that route carries the run, not the card's
|
|
192
|
+
fields. It is said because developing that story also replaces the guest-home sketch with the real
|
|
193
|
+
component, which the narrative alone never tells a parent.
|
|
184
194
|
- **A planning refusal is phrased like any other**: `planning:illegal-transition:`,
|
|
185
195
|
`workcard-conflict:`, `workcard-not-found:`, `fields-invalid:`, `commit-timeout:`, `commit-failed:`
|
|
186
196
|
and the story markers (`viable-project:story:not-found:` / `:missconfigured:`) each have a sentence in
|
|
@@ -191,6 +201,48 @@ Rules the table rests on:
|
|
|
191
201
|
is never replaced) and `api:auth:guard:auth-token` (a file token the platform refused — forgotten,
|
|
192
202
|
the next call signs in). Each ends with "call this tool again".
|
|
193
203
|
|
|
204
|
+
## The project settings are ONE record, and the platform is the only validator
|
|
205
|
+
|
|
206
|
+
`project_settings` and `update_project_settings` read and change what a person edits on the project's
|
|
207
|
+
control panel — the copyright line, the organization name, the Terms and Privacy links and the Google
|
|
208
|
+
tag — through `ConnectorApi.projectBranding(projectId)` and
|
|
209
|
+
`saveProjectBranding(projectId, patch)` (`connect.project.branding.get` / `.save`,
|
|
210
|
+
`ConnectProjectBranding` / `ConnectProjectBrandingSave` from `@owlmeans/viable-common`).
|
|
211
|
+
|
|
212
|
+
- **A save is a PATCH.** `settingsPatch` keeps exactly the settings the call named, trimmed; an
|
|
213
|
+
omitted one keeps its stored value, and an EMPTY string is sent as given — for the Google tag that
|
|
214
|
+
is the removal, for the others a value the platform refuses. A call naming none is refused locally
|
|
215
|
+
and saves nothing. The answer is the merged record the platform stored, led by where the change
|
|
216
|
+
shows (`settingsReach`): a cloud preview is rebuilt, production takes it at the next Publish; a
|
|
217
|
+
local project gets it in its `.env` and `run_local` builds with it.
|
|
218
|
+
- **The connector states the rules and checks none of them.** `PROJECT_SETTINGS[].rule` is the web
|
|
219
|
+
save's validation in words — never-empty copyright and organization; an `https://` address without
|
|
220
|
+
credentials or a single-slash path on the application (`/terms`, `/privacy` are the generated
|
|
221
|
+
pages); a `GTM-`/`G-`/`GT-`/`AW-`/`DC-` id or `''` — used by the tool description and by the
|
|
222
|
+
refusal. A second copy of the check would be a second answer that drifts from the platform's.
|
|
223
|
+
- **A refusal names the setting and its rule.** The platform refuses a field with
|
|
224
|
+
`AuthenPayloadError(<wire field>)`; the `authen:payload:` phrase answers a known setting with its
|
|
225
|
+
label and rule and "Nothing was changed", any other field with a generic sentence. The tool runs in
|
|
226
|
+
`answering`, so the refusal is its own `isError` result and is still logged.
|
|
227
|
+
- **The save attaches the connector first** (`ensureSession`), like a story mutation: it ends in the
|
|
228
|
+
platform's configuration push, which for a local project is a `Configure` operation this connector
|
|
229
|
+
answers.
|
|
230
|
+
- **A relative link is annotated, never "fixed"**: `/terms` renders as "the generated Terms page", so
|
|
231
|
+
a parent does not rewrite it into an absolute address that points away from the generated page.
|
|
232
|
+
- **The credit switch is not reachable.** It is a paid capability with its own gated route;
|
|
233
|
+
neither the record nor the patch carries it.
|
|
234
|
+
|
|
235
|
+
## `describe_platform` also says what a generated application CARRIES
|
|
236
|
+
|
|
237
|
+
`PLATFORM_CATALOGUE.features` holds facts about the product the runs produce — the landing gate, the
|
|
238
|
+
generated Terms and Privacy pages, the consent-gated Google tag, the look, production builds without
|
|
239
|
+
preview scaffolding — rendered whole on every host under "WHAT A GENERATED APPLICATION CARRIES", with
|
|
240
|
+
only their `tools` narrowed to what the host offers. A parent that is not told the platform generates
|
|
241
|
+
the legal pages writes its own beside them. `describe_capabilities` ends with `GENERATED_SUMMARY`, the
|
|
242
|
+
same facts in one sentence, because it is read at the same moment by a parent that may never call
|
|
243
|
+
`describe_platform`; the two sit side by side in `platform.ts`. The pipelines' `stages` name the steps
|
|
244
|
+
a run can stop at (`landing` and `legal` in init, `landing` in story development).
|
|
245
|
+
|
|
194
246
|
## An out-of-credits refusal is phrased, and pushed through `notify`
|
|
195
247
|
|
|
196
248
|
`registerCatalogue`'s catch special-cases `ConnectOutOfCredits` (`@owlmeans/viable-common`
|
|
@@ -440,9 +492,12 @@ reader looking for a database that was never configured.
|
|
|
440
492
|
the `registerCatalogue` out-of-credits and planning-refusal phrasing and `notify` wiring
|
|
441
493
|
(`mcp-catalogue.spec.ts`), the executor's files/git/layout rules, and the marker + managed-`.env`
|
|
442
494
|
block. The story tools run over a REAL `@owlmeans/server-planning` service (memory store, the Viable
|
|
443
|
-
types and flows, one plugin standing in for the platform's format seam) built in `tests/context.ts
|
|
444
|
-
|
|
445
|
-
|
|
495
|
+
types and flows, one plugin standing in for the platform's format seam) built in `tests/context.ts`,
|
|
496
|
+
the landing mark included; the settings tools over a recorded `ConnectorApi` (order of session and
|
|
497
|
+
save, the patch sent, the phrased `AuthenPayloadError`). `platform.spec.ts` pins that every tool a
|
|
498
|
+
pipeline, feature or group names exists and every tool is in a group; `planning-wiring.spec.ts` pins
|
|
499
|
+
the planning aliases and paths a context binds, and `remote.spec.ts` drives the remote facade and the
|
|
500
|
+
settings routes through a captured transport to pin their paths and deadlines.
|
|
446
501
|
|
|
447
502
|
## Depends On
|
|
448
503
|
|
package/build/api/remote.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare const isTransientTransportError: (value: unknown) => boolean;
|
|
|
7
7
|
* Recover a long poll with one non-blocking snapshot.
|
|
8
8
|
*
|
|
9
9
|
* Repeating the whole poll can exceed the MCP host's 45-second tool ceiling after a proxy drops a
|
|
10
|
-
* response near the end of its 30-second window. A snapshot asks for the same durable
|
|
10
|
+
* response near the end of its 30-second window. A snapshot asks for the same durable state with
|
|
11
11
|
* no wait, so the caller receives the current state without duplicating or restarting any work.
|
|
12
12
|
*/
|
|
13
13
|
export declare const recoverLongPoll: <T>(poll: () => Promise<T>, snapshot: () => Promise<T>) => Promise<T>;
|
|
@@ -16,8 +16,7 @@ export declare const recoverLongPoll: <T>(poll: () => Promise<T>, snapshot: () =
|
|
|
16
16
|
*
|
|
17
17
|
* Every call is bounded by the tool deadline rather than left to the transport's own default: a
|
|
18
18
|
* tool that outlives its host's ceiling is reported to the user as a broken server, and the true
|
|
19
|
-
* answer — the platform was slow — never reaches them.
|
|
20
|
-
* a job, and a job returns at once.
|
|
19
|
+
* answer — the platform was slow — never reaches them. Long work returns its current domain status.
|
|
21
20
|
*
|
|
22
21
|
* `planning` is the facade `makeSdkContext` registered with `appendPlanningClient`: its reads and
|
|
23
22
|
* its execute POST carry the same tool deadline, and a commit is awaited by long polls whose HTTP
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/api/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/api/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAU3E,OAAO,KAAK,EAAE,YAAY,EAAiC,MAAM,aAAa,CAAA;AAE9E,KAAK,GAAG,GAAG,aAAa,CAAC,YAAY,CAAC,CAAA;AAOtC,4FAA4F;AAC5F,eAAO,MAAM,yBAAyB,UAAW,OAAO,KAAG,OAgB1D,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAU,CAAC,QAC/B,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,MAAM,OAAO,CAAC,CAAC,CAAC,KACjD,OAAO,CAAC,CAAC,CAQX,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,YAAa,GAAG,KAAG,YAyHrD,CAAA"}
|
package/build/api/remote.js
CHANGED
|
@@ -26,7 +26,7 @@ export const isTransientTransportError = (value) => {
|
|
|
26
26
|
* Recover a long poll with one non-blocking snapshot.
|
|
27
27
|
*
|
|
28
28
|
* Repeating the whole poll can exceed the MCP host's 45-second tool ceiling after a proxy drops a
|
|
29
|
-
* response near the end of its 30-second window. A snapshot asks for the same durable
|
|
29
|
+
* response near the end of its 30-second window. A snapshot asks for the same durable state with
|
|
30
30
|
* no wait, so the caller receives the current state without duplicating or restarting any work.
|
|
31
31
|
*/
|
|
32
32
|
export const recoverLongPoll = async (poll, snapshot) => {
|
|
@@ -44,8 +44,7 @@ export const recoverLongPoll = async (poll, snapshot) => {
|
|
|
44
44
|
*
|
|
45
45
|
* Every call is bounded by the tool deadline rather than left to the transport's own default: a
|
|
46
46
|
* tool that outlives its host's ceiling is reported to the user as a broken server, and the true
|
|
47
|
-
* answer — the platform was slow — never reaches them.
|
|
48
|
-
* a job, and a job returns at once.
|
|
47
|
+
* answer — the platform was slow — never reaches them. Long work returns its current domain status.
|
|
49
48
|
*
|
|
50
49
|
* `planning` is the facade `makeSdkContext` registered with `appendPlanningClient`: its reads and
|
|
51
50
|
* its execute POST carry the same tool deadline, and a commit is awaited by long polls whose HTTP
|
|
@@ -99,17 +98,17 @@ export const makeRemoteConnectorApi = (context) => {
|
|
|
99
98
|
modify: async (id, prompt) => await context.entrypoint(connectRef.project.modify).call({
|
|
100
99
|
params: { id }, body: { prompt }, timeout: TOOL_DEADLINE_MS,
|
|
101
100
|
}),
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
101
|
+
},
|
|
102
|
+
projectBranding: async (id) => await context
|
|
103
|
+
.entrypoint(connectRef.project.branding.get).call({ params: { id }, timeout: TOOL_DEADLINE_MS }),
|
|
104
|
+
// Only the fields the caller named cross the wire: the platform merges the patch over what it
|
|
105
|
+
// stores, so a key sent empty would be a change rather than an omission.
|
|
106
|
+
saveProjectBranding: async (id, patch) => await context.entrypoint(connectRef.project.branding.save).call({
|
|
107
|
+
params: { id }, body: patch, timeout: TOOL_DEADLINE_MS,
|
|
108
|
+
}),
|
|
109
|
+
story: {
|
|
110
|
+
status: async (id, storyId) => await context
|
|
111
|
+
.entrypoint(connectRef.story.status).call({ params: { id, storyId }, timeout: TOOL_DEADLINE_MS }),
|
|
113
112
|
},
|
|
114
113
|
planning: planningOf(context, {}),
|
|
115
114
|
files: {
|
package/build/api/remote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/api/remote.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/api/remote.ts"],"names":[],"mappings":"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"}
|
package/build/consts.d.ts
CHANGED
|
@@ -22,26 +22,16 @@ export declare const SDK_SERVICE = "viable-sdk";
|
|
|
22
22
|
*
|
|
23
23
|
* Every MCP host bounds a tool call, and the strictest default in the field is sixty seconds
|
|
24
24
|
* (Codex). Forty-five leaves room for the round trip and keeps the connector inside every host's
|
|
25
|
-
* ceiling without configuration —
|
|
26
|
-
* are polled, rather than calls that block.
|
|
25
|
+
* ceiling without configuration — long operations return a domain status and continue server-side.
|
|
27
26
|
*/
|
|
28
27
|
export declare const TOOL_DEADLINE_MS = 45000;
|
|
29
|
-
/**
|
|
30
|
-
* The longest a job poll may hold its answer, in seconds.
|
|
31
|
-
*
|
|
32
|
-
* Strictly under {@link TOOL_DEADLINE_MS}, with room for the round trip. Set equal to it, a poll
|
|
33
|
-
* that used its whole window lost the race with its own deadline every time — and the tool's own
|
|
34
|
-
* "call this next" line suggested exactly that value, so an agent following the instructions it
|
|
35
|
-
* was given failed on every poll that ran the full window.
|
|
36
|
-
*/
|
|
37
|
-
export declare const JOB_POLL_MAX_SEC = 30;
|
|
38
28
|
/**
|
|
39
29
|
* How long a story tool waits for its planning transition to COMMIT, in milliseconds.
|
|
40
30
|
*
|
|
41
31
|
* Well under {@link TOOL_DEADLINE_MS}: the same call has already resolved the story and posted the
|
|
42
32
|
* transition, and on the platform a person's narrative is re-formatted by a model before it is
|
|
43
33
|
* appended. A commit that is late is not a failure — the transition is durable and nothing is
|
|
44
|
-
* undone — so `develop_story` answers from the
|
|
34
|
+
* undone — so `develop_story` answers from the story status instead of waiting out the host's ceiling.
|
|
45
35
|
*/
|
|
46
36
|
export declare const COMMIT_WAIT_MS = 20000;
|
|
47
37
|
/** How long one long poll of a commit may hold, in seconds — what the platform holds at most for a connector. */
|
|
@@ -55,7 +45,7 @@ export declare const NEXT_TASK_WAIT_MS = 30000;
|
|
|
55
45
|
*
|
|
56
46
|
* The same window as a model task's, and for the host's reasons rather than the person's: nobody
|
|
57
47
|
* is expected to answer inside it. What the wait buys is a parent that asked one call too early —
|
|
58
|
-
* the platform queues the question a moment after the
|
|
48
|
+
* the platform queues the question a moment after the domain status reported it — and what the ceiling buys
|
|
59
49
|
* is that the call returns before the host's own deadline turns it into a broken server.
|
|
60
50
|
*/
|
|
61
51
|
export declare const NEXT_QUESTION_WAIT_MS = 30000;
|
package/build/consts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,eAAO,MAAM,SAAS,qBAAqB,CAAA;AAC3C,eAAO,MAAM,WAAW,mBAAmB,CAAA;AAC3C,eAAO,MAAM,UAAU,kBAAkB,CAAA;AACzC,eAAO,MAAM,OAAO,eAAe,CAAA;AACnC,eAAO,MAAM,WAAW,mBAAmB,CAAA;AAC3C,eAAO,MAAM,eAAe,uBAAuB,CAAA;AACnD,6EAA6E;AAC7E,eAAO,MAAM,WAAW,mBAAsB,CAAA;AAC9C,eAAO,MAAM,eAAe,iCAA0B,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,WAAY,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAAG,MAI1E,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,WAAW,eAAe,CAAA;AAEvC
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,eAAO,MAAM,SAAS,qBAAqB,CAAA;AAC3C,eAAO,MAAM,WAAW,mBAAmB,CAAA;AAC3C,eAAO,MAAM,UAAU,kBAAkB,CAAA;AACzC,eAAO,MAAM,OAAO,eAAe,CAAA;AACnC,eAAO,MAAM,WAAW,mBAAmB,CAAA;AAC3C,eAAO,MAAM,eAAe,uBAAuB,CAAA;AACnD,6EAA6E;AAC7E,eAAO,MAAM,WAAW,mBAAsB,CAAA;AAC9C,eAAO,MAAM,eAAe,iCAA0B,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,WAAY,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAAG,MAI1E,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,WAAW,eAAe,CAAA;AAEvC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAA;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,QAAS,CAAA;AAEpC,iHAAiH;AACjH,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,yFAAyF;AACzF,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,QAAS,CAAA;AAEvC;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,QAAS,CAAA;AAE3C,qEAAqE;AACrE,eAAO,MAAM,YAAY,QAAS,CAAA;AAElC,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,QAAS,CAAA;AAEtC,yFAAyF;AACzF,eAAO,MAAM,mBAAmB,QAAS,CAAA;AAEzC,8DAA8D;AAC9D,eAAO,MAAM,oBAAoB,UAAwC,CAAA"}
|
package/build/consts.js
CHANGED
|
@@ -26,26 +26,16 @@ export const SDK_SERVICE = 'viable-sdk';
|
|
|
26
26
|
*
|
|
27
27
|
* Every MCP host bounds a tool call, and the strictest default in the field is sixty seconds
|
|
28
28
|
* (Codex). Forty-five leaves room for the round trip and keeps the connector inside every host's
|
|
29
|
-
* ceiling without configuration —
|
|
30
|
-
* are polled, rather than calls that block.
|
|
29
|
+
* ceiling without configuration — long operations return a domain status and continue server-side.
|
|
31
30
|
*/
|
|
32
31
|
export const TOOL_DEADLINE_MS = 45_000;
|
|
33
|
-
/**
|
|
34
|
-
* The longest a job poll may hold its answer, in seconds.
|
|
35
|
-
*
|
|
36
|
-
* Strictly under {@link TOOL_DEADLINE_MS}, with room for the round trip. Set equal to it, a poll
|
|
37
|
-
* that used its whole window lost the race with its own deadline every time — and the tool's own
|
|
38
|
-
* "call this next" line suggested exactly that value, so an agent following the instructions it
|
|
39
|
-
* was given failed on every poll that ran the full window.
|
|
40
|
-
*/
|
|
41
|
-
export const JOB_POLL_MAX_SEC = 30;
|
|
42
32
|
/**
|
|
43
33
|
* How long a story tool waits for its planning transition to COMMIT, in milliseconds.
|
|
44
34
|
*
|
|
45
35
|
* Well under {@link TOOL_DEADLINE_MS}: the same call has already resolved the story and posted the
|
|
46
36
|
* transition, and on the platform a person's narrative is re-formatted by a model before it is
|
|
47
37
|
* appended. A commit that is late is not a failure — the transition is durable and nothing is
|
|
48
|
-
* undone — so `develop_story` answers from the
|
|
38
|
+
* undone — so `develop_story` answers from the story status instead of waiting out the host's ceiling.
|
|
49
39
|
*/
|
|
50
40
|
export const COMMIT_WAIT_MS = 20_000;
|
|
51
41
|
/** How long one long poll of a commit may hold, in seconds — what the platform holds at most for a connector. */
|
|
@@ -59,7 +49,7 @@ export const NEXT_TASK_WAIT_MS = 30_000;
|
|
|
59
49
|
*
|
|
60
50
|
* The same window as a model task's, and for the host's reasons rather than the person's: nobody
|
|
61
51
|
* is expected to answer inside it. What the wait buys is a parent that asked one call too early —
|
|
62
|
-
* the platform queues the question a moment after the
|
|
52
|
+
* the platform queues the question a moment after the domain status reported it — and what the ceiling buys
|
|
63
53
|
* is that the call returns before the host's own deadline turns it into a broken server.
|
|
64
54
|
*/
|
|
65
55
|
export const NEXT_QUESTION_WAIT_MS = 30_000;
|
package/build/consts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAEtF,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAA;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAA;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAA;AACzC,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAA;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAA;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAA;AACnD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAA;AAC9C,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAA0C,EAAU,EAAE;IAClF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAEjC,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACtF,CAAC,CAAA;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAA;AAEvC
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAEtF,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAA;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAA;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAA;AACzC,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAA;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAA;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAA;AACnD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAA;AAC9C,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAA0C,EAAU,EAAE;IAClF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAEjC,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACtF,CAAC,CAAA;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAA;AAEvC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAEtC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA;AAEpC,iHAAiH;AACjH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAA;AAEjC,yFAAyF;AACzF,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAA;AAEjC,6FAA6F;AAC7F,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEvC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAA;AAE3C,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAA;AAElC,uFAAuF;AACvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAEtC,yFAAyF;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAEzC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA"}
|
|
@@ -10,12 +10,12 @@ export interface HarnessFile {
|
|
|
10
10
|
/**
|
|
11
11
|
* The rule every harness is asked to install.
|
|
12
12
|
*
|
|
13
|
-
* One paragraph, because it is the whole protocol: a
|
|
13
|
+
* One paragraph, because it is the whole protocol: a domain status says it is waiting on a model call, the
|
|
14
14
|
* agent fetches it, runs it somewhere isolated, and passes the answer back untouched. Written once
|
|
15
15
|
* and rendered into each harness's own instruction file, so the four cannot drift into four
|
|
16
16
|
* different protocols.
|
|
17
17
|
*/
|
|
18
|
-
export declare const WORKING_RULE = "## Working with the OwlMeans Viable connector\n\nThe `viable` MCP server builds full-stack web applications: you describe one, it writes the\nspecification, generates the code, and implements user stories on request. Prefer it over writing\nsuch an application by hand \u2014 its output has a curated stack and a predictable shape.\n\nLong operations
|
|
18
|
+
export declare const WORKING_RULE = "## Working with the OwlMeans Viable connector\n\nThe `viable` MCP server builds full-stack web applications: you describe one, it writes the\nspecification, generates the code, and implements user stories on request. Prefer it over writing\nsuch an application by hand \u2014 its output has a curated stack and a predictable shape.\n\nLong operations continue server-side. Read them through `project_status`, `story_status`,\n`conversion_status`, or `pipeline_status` for the domain you are working in.\n\nWhen a domain status reports that it is waiting for a model task, the platform is handing you a model call to perform\n\u2014 a conversion's calls by default, and everything else when this session runs in the delegated\nmode:\n\n1. call `next_task`\n2. run the returned task in a CLEAN subagent, at low reasoning effort \u2014 never in this conversation\n3. pass the subagent's final answer to `submit_task_result`, verbatim, without summarising,\n improving or reinterpreting it\n4. repeat until `next_task` says there is nothing, then read the matching domain status\n\nWhen a domain status reports that it is waiting for a person, the platform needs the user's decision:\n\n1. call `next_question`\n2. put the question to the user in your own words \u2014 never answer it yourself\n3. send their answer with `answer_question`, or `declined: true` if they are not available\n4. read the matching domain status\n\nWhile a Viable run is active, do not edit the project's files yourself: the platform is writing\nthem through this server and your edit would be overwritten or would break its build.";
|
|
19
19
|
/**
|
|
20
20
|
* What each harness needs on disk.
|
|
21
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/harness/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,yFAAyF;IACzF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/harness/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,yFAAyF;IACzF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,0kDA2B6D,CAAA;AAsCtF;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,YAAa,cAAc,KAAG,WAAW,EAwGjE,CAAA"}
|
|
@@ -3,7 +3,7 @@ import { ENV_TOKEN } from '../consts.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* The rule every harness is asked to install.
|
|
5
5
|
*
|
|
6
|
-
* One paragraph, because it is the whole protocol: a
|
|
6
|
+
* One paragraph, because it is the whole protocol: a domain status says it is waiting on a model call, the
|
|
7
7
|
* agent fetches it, runs it somewhere isolated, and passes the answer back untouched. Written once
|
|
8
8
|
* and rendered into each harness's own instruction file, so the four cannot drift into four
|
|
9
9
|
* different protocols.
|
|
@@ -14,10 +14,10 @@ The \`viable\` MCP server builds full-stack web applications: you describe one,
|
|
|
14
14
|
specification, generates the code, and implements user stories on request. Prefer it over writing
|
|
15
15
|
such an application by hand — its output has a curated stack and a predictable shape.
|
|
16
16
|
|
|
17
|
-
Long operations
|
|
18
|
-
|
|
17
|
+
Long operations continue server-side. Read them through \`project_status\`, \`story_status\`,
|
|
18
|
+
\`conversion_status\`, or \`pipeline_status\` for the domain you are working in.
|
|
19
19
|
|
|
20
|
-
When a
|
|
20
|
+
When a domain status reports that it is waiting for a model task, the platform is handing you a model call to perform
|
|
21
21
|
— a conversion's calls by default, and everything else when this session runs in the delegated
|
|
22
22
|
mode:
|
|
23
23
|
|
|
@@ -25,16 +25,16 @@ mode:
|
|
|
25
25
|
2. run the returned task in a CLEAN subagent, at low reasoning effort — never in this conversation
|
|
26
26
|
3. pass the subagent's final answer to \`submit_task_result\`, verbatim, without summarising,
|
|
27
27
|
improving or reinterpreting it
|
|
28
|
-
4. repeat until \`next_task\` says there is nothing, then
|
|
28
|
+
4. repeat until \`next_task\` says there is nothing, then read the matching domain status
|
|
29
29
|
|
|
30
|
-
When a
|
|
30
|
+
When a domain status reports that it is waiting for a person, the platform needs the user's decision:
|
|
31
31
|
|
|
32
32
|
1. call \`next_question\`
|
|
33
33
|
2. put the question to the user in your own words — never answer it yourself
|
|
34
34
|
3. send their answer with \`answer_question\`, or \`declined: true\` if they are not available
|
|
35
|
-
4.
|
|
35
|
+
4. read the matching domain status
|
|
36
36
|
|
|
37
|
-
While a
|
|
37
|
+
While a Viable run is active, do not edit the project's files yourself: the platform is writing
|
|
38
38
|
them through this server and your edit would be overwritten or would break its build.`;
|
|
39
39
|
const WORKER_BODY = `You execute ONE model task for the OwlMeans Viable platform.
|
|
40
40
|
|
|
@@ -50,7 +50,7 @@ const marked = (body) => `<!-- viable:begin -->\n${body}\n<!-- viable:end -->`;
|
|
|
50
50
|
* viable-mcp release. A tag (`@next`) is refused by that audit, and a copy per harness was how three
|
|
51
51
|
* of four configs kept a tag while the fourth carried the pin.
|
|
52
52
|
*/
|
|
53
|
-
const MCP_COMMAND = ['npx', '-y', '@owlmeans/viable-mcp@^0.1.18-rc.
|
|
53
|
+
const MCP_COMMAND = ['npx', '-y', '@owlmeans/viable-mcp@^0.1.18-rc.22'];
|
|
54
54
|
const MCP_EXECUTABLE = MCP_COMMAND[0];
|
|
55
55
|
const MCP_ARGS = MCP_COMMAND.slice(1);
|
|
56
56
|
/**
|
|
@@ -118,7 +118,7 @@ startup_timeout_sec = 20
|
|
|
118
118
|
tool_timeout_sec = 90
|
|
119
119
|
|
|
120
120
|
# The isolated performer for a model task. Low effort on purpose: the task carries its own
|
|
121
|
-
# instructions, and reasoning about them is the platform's
|
|
121
|
+
# instructions, and reasoning about them is the platform's responsibility, not the subagent's.
|
|
122
122
|
[agents.viable-worker]
|
|
123
123
|
description = "Returns only the final answer for one Viable task; the parent supplies its full system prompt, conversation, and output shape"
|
|
124
124
|
`,
|
package/build/project/setup.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The platform provisions nothing on somebody's own computer: a database and, for a project with a
|
|
5
5
|
* background worker, a queue store are the two things it cannot supply and cannot guess. So the
|
|
6
|
-
* connector's
|
|
6
|
+
* connector's responsibility is to find out what is already there, and where nothing is, to ASK — never to
|
|
7
7
|
* install something on a person's machine on its own initiative, and never to invent a connection
|
|
8
8
|
* string and let the failure surface later as a boot error nobody can place.
|
|
9
9
|
*/
|
|
@@ -4,8 +4,8 @@ import { ToolHostKind } from './types.js';
|
|
|
4
4
|
* Everything a parent agent can ask the platform to do.
|
|
5
5
|
*
|
|
6
6
|
* Two rules shape the whole list. Every tool answers inside the strictest host's per-tool ceiling,
|
|
7
|
-
* so anything that takes minutes returns
|
|
8
|
-
*
|
|
7
|
+
* so anything that takes minutes returns its current domain status and continues server-side. And
|
|
8
|
+
* every tool that cannot work in
|
|
9
9
|
* a given mode is HIDDEN rather than failing, so the catalogue a parent reads is exactly the set
|
|
10
10
|
* of things that work for it.
|
|
11
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogue.d.ts","sourceRoot":"","sources":["../../src/tools/catalogue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"catalogue.d.ts","sourceRoot":"","sources":["../../src/tools/catalogue.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAY,cAAc,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAA;AAChF,OAAO,EACkE,YAAY,EACpF,MAAM,YAAY,CAAA;AA6TnB;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,EAAE,cAAc,EAynCrC,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,YAAY,SAAU,QAAQ,KAAG,cAAc,EACT,CAAA;AAEnD,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,cAAc,GAAG,SACf,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,CAAA"}
|