mirror of
https://github.com/deepseek-ai/deepseek-harness.git
synced 2026-10-26 16:55:08 +00:00
Merge feat/creation-recommendations into plugin recommendation experiment
This commit is contained in:
commit
c6d9a964d3
193 files changed
+5786
-3181
No files matched your search
@@ -234,10 +234,6 @@ describe('client bundle purity gate', () => {
|
||||
expect(() => resolveId('@deepseek-ai/dsh-spill-policy/notice/internal')).toThrow(/purity/)
|
||||
})
|
||||
|
||||
it('inlines the zero-dependency dsh-action fence utility', () => {
|
||||
expect(resolveId('@deepseek-ai/dsh-util-action-block')).toBeNull()
|
||||
})
|
||||
|
||||
it('inlines the stateless file-drag entry without admitting its subpaths or UI plugin', () => {
|
||||
expect(resolveId('@deepseek-ai/dsh-util-file-drag')).toBeNull()
|
||||
expect(() => resolveId('@deepseek-ai/dsh-util-file-drag/internal')).toThrow(/purity/)
|
||||
|
||||
@@ -90,7 +90,6 @@ const PACKAGE_LIBRARIES: Readonly<Record<string, string>> = {
|
||||
'packages/test-support/remote-mock': 'Browser-side test infrastructure; mounts nothing into a product composition.',
|
||||
'packages/typert/generator': 'Build-time generator run outside any agent runtime.',
|
||||
'packages/typert/protocol': 'Compiler-independent protocol declarations.',
|
||||
'packages/util/action-block': 'Zero-dependency fenced-block parser; exports helpers without a plugin entry.',
|
||||
'packages/util/atomic-write': 'Zero-dependency filesystem write utility.',
|
||||
'packages/util/brand': 'Stateless nominal-string and canonical-key constructors.',
|
||||
'packages/util/crypto': 'Zero-dependency identifier minting utility.',
|
||||
|
||||
@@ -48,9 +48,9 @@ const MAX_DECL_CHARS = 1200
|
||||
* share that hands down a subsystem instead of a share, and prose that grew
|
||||
* into a manual. Every report also lists one line per standard prop seat of its
|
||||
* scope, so the widest Session-scope slot (`tool.call.toolview`, with the
|
||||
* global and Session access seats) sets the current 122.
|
||||
* global and Session access seats) sets the current 123.
|
||||
*/
|
||||
const MAX_ENTRY_LINES = 122
|
||||
const MAX_ENTRY_LINES = 123
|
||||
|
||||
/** One register-call option as the catalog teaches it. */
|
||||
interface OptionDoc {
|
||||
|
||||
@@ -60,7 +60,7 @@ export const SERVICE_PAGE: Record<string, string> = {
|
||||
productAnalytics: 'product-telemetry.md',
|
||||
connection: 'web-server.md',
|
||||
pluginManager: 'boot.md',
|
||||
creationRecommendations: 'boot.md',
|
||||
actionCards: 'boot.md',
|
||||
pluginRecommendations: 'boot.md',
|
||||
pluginMarket: 'boot.md',
|
||||
pluginRegistryProbe: 'boot.md',
|
||||
@@ -906,9 +906,10 @@ export const FOUNDATION_TYPE_NAMES: ReadonlySet<string> = new Set([
|
||||
|
||||
/** Project types deliberately documented outside the subsystems catalog. */
|
||||
export const TYPE_LINK_EXEMPTIONS: Readonly<Record<string, string>> = {
|
||||
CreationActionResult: 'packages/experimental/creation-recommendations/README.md',
|
||||
CreationSlot: 'packages/experimental/creation-recommendations/README.md',
|
||||
RecommendationActionResult: 'packages/experimental/plugin-recommendations/README.md',
|
||||
ActionCardDecision: 'packages/experimental/action-cards/README.md',
|
||||
ActionCardKind: 'packages/experimental/action-cards/README.md',
|
||||
ActionCardResult: 'packages/experimental/action-cards/README.md',
|
||||
ActionCardView: 'packages/experimental/action-cards/README.md',
|
||||
RecommendationDetails: 'packages/experimental/plugin-recommendations/README.md',
|
||||
ProductEvent: 'Desktop event fields are owned by packages/client/product-analytics/README.md and src/events.ts',
|
||||
ConnectionFetchHandler: 'shared Fetch dispatch is owned by packages/client/connection/src/rpc.ts',
|
||||
|
||||
@@ -108,12 +108,12 @@ const GROUP_ORDER = [
|
||||
|
||||
const SERVICE_ROLES: ServiceRole[] = [
|
||||
{
|
||||
key: 'creationRecommendations',
|
||||
pkg: 'experimental-creation-recommendations',
|
||||
title: 'Explicit-need interface creation',
|
||||
key: 'actionCards',
|
||||
pkg: 'experimental-action-cards',
|
||||
title: 'Optional action cards',
|
||||
mode: 'service',
|
||||
consumers: ['experimental-client-ui-creation-recommendations'],
|
||||
note: 'Starts a Creator after a human choice and owns installation and removal of the new bundle.',
|
||||
consumers: ['experimental-creation-recommendations', 'experimental-client-ui-action-cards'],
|
||||
note: 'Owns the card tool, card state, user actions and status notices; card kinds register their actions and handlers.',
|
||||
},
|
||||
{
|
||||
key: 'pluginRecommendations',
|
||||
|
||||
@@ -43,6 +43,8 @@ import SubagentRuntime from '@deepseek-ai/dsh-subagent'
|
||||
import type { SubagentProvider } from '@deepseek-ai/dsh-subagent'
|
||||
import * as ToolSubagentControl from '@deepseek-ai/dsh-tool-subagent-control'
|
||||
import SkillRegistry from '@deepseek-ai/dsh-skill'
|
||||
import ActionCards from '@deepseek-ai/dsh-experimental-action-cards'
|
||||
import RemoteAccess from '@deepseek-ai/dsh-api-remote-access'
|
||||
import * as SkillFileSystem from '@deepseek-ai/dsh-skill-filesystem'
|
||||
import LocalJobRegistry from '@deepseek-ai/dsh-jobs-local'
|
||||
import * as ToolAskUser from '@deepseek-ai/dsh-tool-ask-user'
|
||||
@@ -239,6 +241,19 @@ const TOOL_PACKAGES: ToolPackage[] = [
|
||||
})
|
||||
},
|
||||
},
|
||||
{
|
||||
pkg: '@deepseek-ai/dsh-experimental-action-cards',
|
||||
dir: 'action-cards',
|
||||
source: 'packages/experimental/action-cards/src/index.ts',
|
||||
requires: ['ctx.tools', 'ctx.agents', 'ctx.sessionProjections', 'ctx.remoteAccess'],
|
||||
writes: ['tool/call', 'tool/result', 'plugin:action-cards/decision', 'user/message'],
|
||||
async mount(ctx) {
|
||||
await ctx.plugin(AgentRegistry)
|
||||
await ctx.plugin(RemoteAccess)
|
||||
await ctx.plugin(ActionCards)
|
||||
},
|
||||
note: 'Declared only to an Agent that loaded the skill of a registered card kind; the kind packages register their actions, and the Personalized pages bundle supplies the only shipped kind.',
|
||||
},
|
||||
{
|
||||
pkg: '@deepseek-ai/dsh-tool-ask-user',
|
||||
dir: 'tool-ask-user',
|
||||
|
||||
@@ -49,6 +49,7 @@ describe('release families', () => {
|
||||
expect(members
|
||||
.filter(member => member.directory.startsWith('packages/experimental/'))
|
||||
.map(member => member.name)).toEqual([
|
||||
'@deepseek-ai/dsh-experimental-action-cards',
|
||||
'@deepseek-ai/dsh-experimental-agent-team-profile',
|
||||
'@deepseek-ai/dsh-experimental-agent-team',
|
||||
'@deepseek-ai/dsh-experimental-api-speech-to-text',
|
||||
@@ -59,6 +60,7 @@ describe('release families', () => {
|
||||
'@deepseek-ai/dsh-experimental-browser-use-runtime',
|
||||
'@deepseek-ai/dsh-experimental-browser-use-stagehand-native',
|
||||
'@deepseek-ai/dsh-experimental-claude-code-mods',
|
||||
'@deepseek-ai/dsh-experimental-client-ui-action-cards',
|
||||
'@deepseek-ai/dsh-experimental-client-ui-agent-team',
|
||||
'@deepseek-ai/dsh-experimental-client-ui-claude-code-mods',
|
||||
'@deepseek-ai/dsh-experimental-client-ui-cot-translation',
|
||||
|
||||
@@ -36,7 +36,6 @@ const NO_MODEL_EXPERIENCE_SECTION: Readonly<Record<string, string>> = {
|
||||
'packages/util/home-paths': 'The package only resolves harness-owned host paths; model-facing consumers own any rendered use.',
|
||||
'packages/util/launch-environment': 'The package only resolves host environment values; model-facing consumers own any rendered use.',
|
||||
'packages/util/workspace-path': 'The package only formats Workspace paths for browser UI; it never constructs model input.',
|
||||
'packages/util/action-block': 'The package only parses and hides fenced blocks in answer text; the card experiments that consume it own the model-facing contract.',
|
||||
'packages/util/values': 'The package only validates, snapshots, compares, freezes, or rejects caller-owned values; consumers own every model-facing use.',
|
||||
'packages/boot/official-bundles': 'The package only lists bundle package names and their display metadata; the loaded plugin tree owns model context.',
|
||||
'packages/util/code-language': 'The package only maps a filename suffix to a syntax-highlighting language id; the read consumer owns the persisted hint.',
|
||||
@@ -57,8 +56,9 @@ const SENTENCE_MODEL_EXPERIENCE: Readonly<Record<string, SentenceContract>> = {
|
||||
'packages/experimental/speech-to-text-sensevoice': { kind: 'none', reason: 'Local recognition returns transient text without modifying model context.' },
|
||||
'packages/experimental/client-ui-voice-input': { kind: 'none', reason: 'Inserts reviewable text into the unsent draft without submitting to the Agent.' },
|
||||
'packages/experimental/plugin-market-bundle': { kind: 'indirect', reason: 'Mounts the pluginMarket service, which lets the Creator preset register the plugin_market tool documented in packages/boot/plugin-market.' },
|
||||
'packages/experimental/client-ui-creation-recommendations': { kind: 'indirect', reason: 'The card starts a Creator through the Host creation service; the Host owns its logged task and tool schema.' },
|
||||
'packages/experimental/client-ui-plugin-recommendations': { kind: 'indirect', reason: 'The card calls the Host recommendation service, which owns the skill and the logged status notice.' },
|
||||
'packages/experimental/client-ui-action-cards': { kind: 'indirect', reason: 'Card actions go to the Host card service, which owns the logged tool, decisions and status notice.' },
|
||||
'packages/experimental/client-ui-creation-recommendations': { kind: 'indirect', reason: 'The page card body starts a Creator through the Host page kind; the Host owns its logged task.' },
|
||||
'packages/experimental/client-ui-plugin-recommendations': { kind: 'indirect', reason: 'The plugin card body enables through the Host plugin kind; the Host card service owns the logged tool, decisions and status notice.' },
|
||||
'packages/experimental/voice-input-bundle': { kind: 'none', reason: 'Composes dictation and preparation plugins without adding any model-facing contribution.' },
|
||||
'packages/telemetry/otel': { kind: 'none', reason: 'The service delivers caller-selected records without changing model context.' },
|
||||
'packages/host/product-telemetry-otel': { kind: 'none', reason: 'The plugin exports explicit analytics records without contributing model context.' },
|
||||
|
||||
Reference in new issue
Block a user