@adaptiqai/deepseek-harness 0.0.0-stage → 0.2.2
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 +114 -2
- package/assets/fonts/Manrope-OFL.txt +93 -0
- package/cordis.patch.yml +7 -0
- package/icon.svg +10 -0
- package/lib/client.js +7 -0
- package/lib/index.js +4181 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +560 -0
- package/lib/typert.remote-client.d.ts +5 -0
- package/lib/typert.remote-client.js +360 -0
- package/lib/types/client/Access.d.ts +33 -0
- package/lib/types/client/Connect.d.ts +18 -0
- package/lib/types/client/Extras.d.ts +34 -0
- package/lib/types/client/Knowledge.d.ts +35 -0
- package/lib/types/client/MemoryPill.d.ts +21 -0
- package/lib/types/client/Overlay.d.ts +29 -0
- package/lib/types/client/SettingsPage.d.ts +22 -0
- package/lib/types/client/actions.d.ts +87 -0
- package/lib/types/client/index.d.ts +15 -0
- package/lib/types/client/model.d.ts +37 -0
- package/lib/types/client/store.d.ts +112 -0
- package/lib/types/client/styles/fonts.d.ts +1 -0
- package/lib/types/client/ui.d.ts +69 -0
- package/lib/types/host/adapter.d.ts +54 -0
- package/lib/types/host/commands.d.ts +17 -0
- package/lib/types/host/config.d.ts +33 -0
- package/lib/types/host/controller.d.ts +85 -0
- package/lib/types/host/index.d.ts +12 -0
- package/lib/types/host/stores.d.ts +27 -0
- package/lib/types/host/stream.d.ts +25 -0
- package/lib/types/host/tools.d.ts +14 -0
- package/lib/types/host/wire.d.ts +62 -0
- package/locale/da.json +6 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +106 -3
package/README.md
CHANGED
|
@@ -1,3 +1,115 @@
|
|
|
1
|
-
#
|
|
1
|
+
# AdaptiqAI for DeepSeek Harness
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Use your AdaptiqAI workspace in DeepSeek Harness: every model your workspace has lanes on, with native memory that keeps the whole conversation — up to 5 million tokens — and your Knowledge collections in any conversation. You sign in once, or create your account, in the browser; then pick a model and start, all from inside the harness. There are no keys to copy.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
1. Open **Plugins** in the sidebar and choose **Add plugin**.
|
|
10
|
+
2. Enter the package — `@adaptiqai/deepseek-harness`, or the full path to a downloaded `adaptiqai-deepseek-harness-<version>.tgz` — and install it.
|
|
11
|
+
3. A welcome card asks you to **Connect AdaptiqAI**. Your browser opens; you sign in (or create an account with GitHub, Google or email) and approve, and the harness picks it up by itself.
|
|
12
|
+
4. A new account has no model yet: the same card shows the models on offer, with price, speed and memory. Choose one and how many lanes (conversations at once), then **Get access** and confirm in the browser. The model appears in the picker as soon as it is active.
|
|
13
|
+
|
|
14
|
+
From a terminal the same is:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
dsh plugin --profile web add @adaptiqai/deepseek-harness
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
DeepSeek Harness 0.2.0-rc.2 or a later 0.2 release is required.
|
|
21
|
+
|
|
22
|
+
## What you get
|
|
23
|
+
|
|
24
|
+
**Your models, set up correctly.** The model picker gets an **AdaptiqAI** group with exactly the models your workspace has lanes on. Each one comes with its real context window, its output limit and its own thinking levels, all read from the server — nothing in the plugin names a model.
|
|
25
|
+
|
|
26
|
+
 
|
|
27
|
+
|
|
28
|
+
**Memory you can see.** A small pill next to the send button shows how much of the conversation AdaptiqAI holds (`NCM · 25k of 5M`). After each answer it shows how much came straight from memory (`24.6k from memory`). Click it to switch the conversation between **Remember** and **Private**, see the last reply's split, and add or remove knowledge.
|
|
29
|
+
|
|
30
|
+
 
|
|
31
|
+
|
|
32
|
+
**Settings → AdaptiqAI.** Your workspace, the models and lanes with live running/waiting counts, memory use split into conversations and knowledge, whether new conversations are saved, and links to the console.
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
**Knowledge.** The Knowledge panel in the sidebar lists your collections. Use one in the open conversation with one click, or drop files to create a new collection; it is attached automatically when it is ready.
|
|
37
|
+
|
|
38
|
+
 
|
|
39
|
+
|
|
40
|
+
**One model per memory.** AdaptiqAI builds a conversation's memory and each collection for one model, and they only work with that model. The Knowledge panel lists the collections that work with the model you are using first. Collections built for other models appear below, greyed out, each with **Make available for <model>**. A collection can never be added to a conversation on the wrong model. If you switch the model in a conversation whose memory is on another model, a short note above the composer offers **Switch back** or **Start fresh on <model>**.
|
|
41
|
+
|
|
42
|
+
 
|
|
43
|
+
|
|
44
|
+
**Notices that say what to do.** If every lane is busy, the harness waits and retries by itself and tells you so. If the workspace has no lanes on a model, you get a **Get access** button. If memory is nearly full, you are told before it fills, with a way to clean up or continue privately. If your sign-in expires, you are asked to sign in again.
|
|
45
|
+
|
|
46
|
+

|
|
47
|
+
|
|
48
|
+
**`/adaptiq`** in the composer: `status`, `signin`, `private`, `remember`, `knowledge`, `open`, `diagnostics`, `signout`.
|
|
49
|
+
|
|
50
|
+
**Get a model without leaving the harness.** Settings → AdaptiqAI → **Get a model** (or **Get access** on any "no lanes" notice) lists what is on offer. You confirm, and pay when payment is by card, in the browser; the plugin follows the request and shows the model when it is ready.
|
|
51
|
+
|
|
52
|
+
 
|
|
53
|
+
|
|
54
|
+
**Conversations as knowledge.** The Knowledge panel's **Conversations** tab lists your other conversations on the same model, newest first. Add one, and this conversation knows what it knew.
|
|
55
|
+
|
|
56
|
+

|
|
57
|
+
|
|
58
|
+
**Agent tools.** Agents can find and attach knowledge (`adaptiq_knowledge`), check shared memory and offer clean-up options (`adaptiq_memory`), and save what they learned as a new collection (`adaptiq_create_knowledge`). Agents never delete anything; clean-up happens in the console.
|
|
59
|
+
|
|
60
|
+
## How it works
|
|
61
|
+
|
|
62
|
+
- **Requests** go to the AdaptiqAI OpenAI-compatible API. Each request carries the harness conversation id (`X-Adaptiq-Session-Id`), so the server keeps one memory per conversation. Title requests carry no id, so they never fork a saved conversation.
|
|
63
|
+
- **No compaction.** AdaptiqAI keeps the full conversation, so the plugin reports the model's true context window and declines the harness's compaction requests with a plain explanation. Nothing is ever summarised away.
|
|
64
|
+
- **Thinking levels** come from each model's capability card (`adaptiq-model-capabilities-v1`): the levels, the value that turns thinking off, the default and the request field. Models without a card fall back to Low/High/Extra high/Max only when their id names a reasoning model.
|
|
65
|
+
- **Usage** is reported the harness's way: tokens read from memory count as cache reads, so the harness's own counters (cost, cache hit) are right.
|
|
66
|
+
- **Busy and preparing answers** are retried by the harness, honouring the server's `Retry-After`.
|
|
67
|
+
|
|
68
|
+
## Privacy and security
|
|
69
|
+
|
|
70
|
+
- Sign-in uses the device flow: the plugin shows a short code, you approve in the browser, and the plugin receives a workspace credential. It is stored in the harness credential store (`$DSH_HOME/.credentials.yaml`, readable only by you) and renews itself. Tokens never reach the browser page.
|
|
71
|
+
- The connection appears in the AdaptiqAI console under **API keys** as "DeepSeek Harness on <your computer>"; revoking it there disconnects this computer only.
|
|
72
|
+
- **Private** conversations can still read memory and knowledge, but nothing new is saved.
|
|
73
|
+
- `/adaptiq diagnostics` produces a report without any secrets that you can send to support.
|
|
74
|
+
|
|
75
|
+
## Headless and CI
|
|
76
|
+
|
|
77
|
+
Without a browser, store an API key from the console under the credential reference `ADAPTIQAI_API_KEY` (for example as an environment variable). The plugin uses it whenever no one is signed in.
|
|
78
|
+
|
|
79
|
+
## Configuration
|
|
80
|
+
|
|
81
|
+
Everything has a production default. To change something, add a row to your profile's `cordis.patch.yml`:
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
- id: adaptiq
|
|
85
|
+
name: '@adaptiqai/deepseek-harness'
|
|
86
|
+
config:
|
|
87
|
+
route: adaptiqai # provider id in the model picker
|
|
88
|
+
apiBase: https://api.adaptiqai.com
|
|
89
|
+
consoleUrl: https://memory.adaptiqai.com/memory
|
|
90
|
+
apiKeyEnv: ADAPTIQAI_API_KEY # headless credential reference
|
|
91
|
+
tools: true # agent tools
|
|
92
|
+
progressEvents: true # streamed "preparing" progress
|
|
93
|
+
streamIdleTimeoutSeconds: 900
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Troubleshooting
|
|
97
|
+
|
|
98
|
+
- **"AdaptiqAI models are hidden — another provider already uses the route".** An older hand-made `adaptiqai` provider exists in your profile (usually an `llm-pi-ai` entry in `cordis.patch.yml`). Remove that entry and restart the harness.
|
|
99
|
+
- **Models missing.** Open Settings → AdaptiqAI and press refresh; the list shows exactly what the workspace has lanes on.
|
|
100
|
+
- Anything else: run `/adaptiq diagnostics` and send the report to support.
|
|
101
|
+
|
|
102
|
+
## Development
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
pnpm install
|
|
106
|
+
npm run link-dsh # link the locally installed DeepSeek Harness packages for types and tests
|
|
107
|
+
npm run build # lib/index.js (Host), lib/client.js (browser), Typert artifacts
|
|
108
|
+
npm test # unit tests
|
|
109
|
+
ADAPTIQ_LIVE=1 ADAPTIQAI_API_KEY=ak_live_… npx vitest run test/live.test.ts # one short live request
|
|
110
|
+
npm run pack:local # dist/adaptiqai-deepseek-harness-<version>.tgz
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Layout: `src/host` (adapter, sign-in, workspace service, Remote controller, command, tools), `src/client` (React UI in the AdaptiqAI design), `src/shared` (wire types), `scripts/remote-spec.mjs` (the Remote namespace; `scripts/gen-typert.mjs` turns it into the Typert artifacts the harness loads).
|
|
114
|
+
|
|
115
|
+
The UI uses PP Frama when it is installed on the computer. The package does not ship PP Frama (its licence does not allow it); otherwise it falls back to Manrope, an SIL Open Font License grotesk embedded in the browser bundle (licence in `assets/fonts/Manrope-OFL.txt`).
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2019 The Manrope Project Authors (https://github.com/sharanda/manrope)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# AdaptiqAI for DeepSeek Harness. One row: the Host half (model provider,
|
|
2
|
+
# sign-in, memory, knowledge tools, /adaptiq) and, through package.json
|
|
3
|
+
# dsh.client, the browser half (settings, composer memory pill, Knowledge,
|
|
4
|
+
# notices).
|
|
5
|
+
- insert:
|
|
6
|
+
- id: adaptiq
|
|
7
|
+
name: '@adaptiqai/deepseek-harness'
|
package/icon.svg
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
|
2
|
+
<!-- AdaptiqAI cairn on Dark Navy -->
|
|
3
|
+
<rect width="128" height="128" rx="28" fill="#0F1A2E"/>
|
|
4
|
+
<g transform="translate(64 2) scale(0.78)">
|
|
5
|
+
<ellipse cx="0" cy="110" rx="48" ry="14" fill="#D94E3A"/>
|
|
6
|
+
<ellipse cx="-3" cy="78" rx="36" ry="12" fill="#F06650"/>
|
|
7
|
+
<ellipse cx="3" cy="48" rx="26" ry="10" fill="#F4897A"/>
|
|
8
|
+
<ellipse cx="0" cy="22" rx="16" ry="8" fill="#FFFFFF"/>
|
|
9
|
+
</g>
|
|
10
|
+
</svg>
|