@adhdev/daemon-core 1.0.18-rc.16 → 1.0.18-rc.18
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/dist/commands/cli-manager.d.ts +9 -0
- package/dist/config/mesh-json-config.d.ts +62 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +919 -421
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +880 -391
- package/dist/index.mjs.map +1 -1
- package/dist/providers/auto-approve-modes.d.ts +14 -0
- package/dist/providers/cli-provider-instance.d.ts +4 -0
- package/dist/providers/contracts.d.ts +17 -0
- package/dist/providers/provider-schema.d.ts +1 -0
- package/dist/repo-mesh-types.d.ts +38 -6
- package/dist/shared-types.d.ts +3 -1
- package/package.json +3 -3
- package/src/commands/cli-manager.ts +54 -8
- package/src/commands/med-family/mesh-crud.ts +155 -0
- package/src/config/mesh-json-config.ts +103 -0
- package/src/index.ts +21 -1
- package/src/mesh/mesh-event-forwarding.ts +18 -2
- package/src/mesh/mesh-queue-assignment.ts +66 -9
- package/src/providers/auto-approve-modes.ts +97 -0
- package/src/providers/cli-provider-instance.ts +45 -13
- package/src/providers/contracts.ts +25 -1
- package/src/providers/provider-schema.ts +83 -0
- package/src/providers/sdk/v1/schemas/cli/provider.schema.json +44 -0
- package/src/repo-mesh-types.ts +112 -12
- package/src/shared-types.ts +3 -1
- package/src/status/snapshot.ts +2 -0
package/src/repo-mesh-types.ts
CHANGED
|
@@ -15,6 +15,11 @@ import type { GitRepoStatus, GitCompactSummary } from './git/git-types.js';
|
|
|
15
15
|
import type { MeshMissionSummary, MeshMissionSlimSummary } from './mesh/mesh-missions.js';
|
|
16
16
|
import type { MeshMagiActivitySummary } from './mesh/mesh-magi-status.js';
|
|
17
17
|
import type { MagiKindPanelMap, DifficultyBrainMap, NodeCapabilitySlot } from '@adhdev/mesh-shared';
|
|
18
|
+
import type { ProviderModule } from './providers/contracts.js';
|
|
19
|
+
import { deriveAutoApproveModeRisk } from './providers/auto-approve-modes.js';
|
|
20
|
+
// Type-only import (no runtime cycle) — mesh-json-config imports types from this
|
|
21
|
+
// module, and this direction is `import type` so tsc erases it at emit.
|
|
22
|
+
import type { RepoMeshDeclarativeConfig } from './config/mesh-json-config.js';
|
|
18
23
|
|
|
19
24
|
// ─── Core Mesh Types ────────────────────────────
|
|
20
25
|
|
|
@@ -350,6 +355,8 @@ export interface RepoMeshPolicy {
|
|
|
350
355
|
* A node policy may override this per-node (RepoMeshNodePolicy.delegatedWorkerAutoApprove).
|
|
351
356
|
*/
|
|
352
357
|
delegatedWorkerAutoApprove?: boolean;
|
|
358
|
+
/** Explicit opt-in required before delegated workers may use a dangerous provider mode. */
|
|
359
|
+
delegatedWorkerDangerousModeAllow?: boolean;
|
|
353
360
|
/**
|
|
354
361
|
* MESH-SEND-KEYS (feature 3): opt-in to allow the coordinator to inject
|
|
355
362
|
* DESTRUCTIVE keys (CTRL_C / ESC) into a worker PTY via mesh_send_keys. These
|
|
@@ -505,6 +512,8 @@ export interface RepoMeshNodePolicy {
|
|
|
505
512
|
* precedence over the mesh-level policy for worker sessions launched onto this node.
|
|
506
513
|
*/
|
|
507
514
|
delegatedWorkerAutoApprove?: boolean;
|
|
515
|
+
/** Per-node override for dangerous delegated worker mode authorization. */
|
|
516
|
+
delegatedWorkerDangerousModeAllow?: boolean;
|
|
508
517
|
/**
|
|
509
518
|
* MESH-SEND-KEYS (feature 3): per-node override for
|
|
510
519
|
* RepoMeshPolicy.allowSendKeysDestructive.
|
|
@@ -550,6 +559,7 @@ export const DEFAULT_MESH_POLICY: RepoMeshPolicy = {
|
|
|
550
559
|
// any specific session manually; that override is preserved per-device.
|
|
551
560
|
spawnedSessionVisibility: 'hidden',
|
|
552
561
|
delegatedWorkerAutoApprove: true,
|
|
562
|
+
delegatedWorkerDangerousModeAllow: false,
|
|
553
563
|
sessionCleanupOnNodeRemove: 'preserve',
|
|
554
564
|
// MAGI auto-launches a worker session per pinned replica target with no idle
|
|
555
565
|
// session; those stay idle-LIVE after their turn. Default ON (stop_and_delete)
|
|
@@ -776,6 +786,13 @@ export function mergeAndNormalizePolicy(
|
|
|
776
786
|
} else {
|
|
777
787
|
delete policy.autoConvergeCodeChange;
|
|
778
788
|
}
|
|
789
|
+
// Dangerous delegated-worker provider modes are fail-closed and only persist
|
|
790
|
+
// when the mesh owner has explicitly opted in.
|
|
791
|
+
if (policy.delegatedWorkerDangerousModeAllow === true) {
|
|
792
|
+
policy.delegatedWorkerDangerousModeAllow = true;
|
|
793
|
+
} else {
|
|
794
|
+
delete policy.delegatedWorkerDangerousModeAllow;
|
|
795
|
+
}
|
|
779
796
|
// Coordinator idle-push policy: strict opt-in. Only persist the explicit
|
|
780
797
|
// 'auto_silent_on_dispatch' value; any other/invalid value normalizes to the
|
|
781
798
|
// 'always' default and is dropped so existing meshes.json stays byte-for-byte
|
|
@@ -789,23 +806,106 @@ export function mergeAndNormalizePolicy(
|
|
|
789
806
|
}
|
|
790
807
|
|
|
791
808
|
/**
|
|
792
|
-
* Resolve
|
|
793
|
-
*
|
|
794
|
-
*
|
|
795
|
-
*
|
|
796
|
-
*
|
|
809
|
+
* Resolve delegated worker auto-approve. Legacy providers return a boolean. Providers
|
|
810
|
+
* with modes return a mode id, except a dangerous mode is downgraded to a
|
|
811
|
+
* non-dangerous PTY mode unless mesh/node policy explicitly opts in.
|
|
812
|
+
*
|
|
813
|
+
* THREE EXPLICIT STAGES — do not collapse them; the ordering is a hard MAGI
|
|
814
|
+
* invariant:
|
|
815
|
+
*
|
|
816
|
+
* ① ENABLE gate (machine-local policy only): node boolean > mesh boolean.
|
|
817
|
+
* `enabled=false` returns `false` IMMEDIATELY, BEFORE any mode selection.
|
|
818
|
+
* The repo `mesh.json` providerDefaults has ZERO influence here — a
|
|
819
|
+
* node/mesh opt-out is never overridden by a repo-declared requested mode.
|
|
820
|
+
*
|
|
821
|
+
* ② MODE selection (only when enabled === true):
|
|
822
|
+
* task override [FUTURE — param reserved below, not yet wired] >
|
|
823
|
+
* repo mesh.json providerDefaults.autoApproveModes[providerType] >
|
|
824
|
+
* provider spec autoApproveModes.default.
|
|
825
|
+
* A repo-requested mode ID is adopted ONLY when it exists in the provider's
|
|
826
|
+
* own `autoApproveModes.modes`; an unknown/stale/typo'd ID is IGNORED and we
|
|
827
|
+
* fall back to the provider default (fail-closed: never coerce into a
|
|
828
|
+
* dangerous mode via a bad ID).
|
|
829
|
+
*
|
|
830
|
+
* ③ DANGEROUS gate: whichever mode stage ② picked, if it is dangerous and the
|
|
831
|
+
* machine-local delegatedWorkerDangerousModeAllow is not set, downgrade to a
|
|
832
|
+
* non-dangerous PTY-parse mode (or `false` if none exists).
|
|
797
833
|
*/
|
|
798
834
|
export function resolveDelegatedWorkerAutoApprove(
|
|
799
|
-
meshPolicy?: Pick<RepoMeshPolicy, 'delegatedWorkerAutoApprove'> | null,
|
|
800
|
-
nodePolicy?: Pick<RepoMeshNodePolicy, 'delegatedWorkerAutoApprove'> | null,
|
|
801
|
-
|
|
835
|
+
meshPolicy?: Pick<RepoMeshPolicy, 'delegatedWorkerAutoApprove' | 'delegatedWorkerDangerousModeAllow'> | null,
|
|
836
|
+
nodePolicy?: Pick<RepoMeshNodePolicy, 'delegatedWorkerAutoApprove' | 'delegatedWorkerDangerousModeAllow'> | null,
|
|
837
|
+
provider?: Pick<ProviderModule, 'autoApproveModes'> | null,
|
|
838
|
+
repoConfig?: RepoMeshDeclarativeConfig | null,
|
|
839
|
+
// providerType is needed to look up the repo-declared requested mode; it is
|
|
840
|
+
// separate from `provider` because the caller resolves the spec independently.
|
|
841
|
+
providerType?: string | null,
|
|
842
|
+
): boolean | string {
|
|
843
|
+
// ── ① ENABLE gate — machine-local only. false short-circuits before mode. ──
|
|
844
|
+
let enabled = true;
|
|
802
845
|
if (typeof nodePolicy?.delegatedWorkerAutoApprove === 'boolean') {
|
|
803
|
-
|
|
846
|
+
enabled = nodePolicy.delegatedWorkerAutoApprove;
|
|
847
|
+
} else if (typeof meshPolicy?.delegatedWorkerAutoApprove === 'boolean') {
|
|
848
|
+
enabled = meshPolicy.delegatedWorkerAutoApprove;
|
|
804
849
|
}
|
|
805
|
-
if (
|
|
806
|
-
|
|
850
|
+
if (!enabled) return false;
|
|
851
|
+
|
|
852
|
+
const modes = provider?.autoApproveModes;
|
|
853
|
+
if (!modes) return true;
|
|
854
|
+
|
|
855
|
+
// ── ② MODE selection (enabled only). Repo providerDefaults MAY override the
|
|
856
|
+
// provider spec default here — but only with a mode ID the spec knows. ──
|
|
857
|
+
// Future: a per-task override would slot in ahead of the repo default; the
|
|
858
|
+
// signature reserves that precedence but no task override is wired yet.
|
|
859
|
+
const requestedModeRaw = typeof providerType === 'string'
|
|
860
|
+
? repoConfig?.providerDefaults?.autoApproveModes?.[providerType.trim()]
|
|
861
|
+
: undefined;
|
|
862
|
+
const requestedModeId = typeof requestedModeRaw === 'string' && requestedModeRaw.trim()
|
|
863
|
+
? requestedModeRaw.trim()
|
|
864
|
+
: '';
|
|
865
|
+
const requestedMode = requestedModeId
|
|
866
|
+
? modes.modes.find((mode) => mode.id === requestedModeId)
|
|
867
|
+
: undefined;
|
|
868
|
+
const selectedMode = requestedMode
|
|
869
|
+
?? modes.modes.find((mode) => mode.id === modes.default);
|
|
870
|
+
if (!selectedMode || selectedMode.strategy === 'post-boot-command') return false;
|
|
871
|
+
|
|
872
|
+
// ── ③ DANGEROUS gate — downgrade a dangerous selection without machine opt-in. ──
|
|
873
|
+
const dangerousAllowed = resolveDelegatedWorkerDangerousModeAllow(meshPolicy, nodePolicy);
|
|
874
|
+
if (deriveAutoApproveModeRisk(selectedMode) === 'dangerous' && !dangerousAllowed) {
|
|
875
|
+
const ptyFallback = modes.modes.find((mode) =>
|
|
876
|
+
mode.strategy === 'pty-parse-default' && deriveAutoApproveModeRisk(mode) !== 'dangerous');
|
|
877
|
+
return ptyFallback?.id || false;
|
|
807
878
|
}
|
|
808
|
-
return
|
|
879
|
+
return selectedMode.id;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
export function resolveDelegatedWorkerDangerousModeAllow(
|
|
883
|
+
meshPolicy?: Pick<RepoMeshPolicy, 'delegatedWorkerDangerousModeAllow'> | null,
|
|
884
|
+
nodePolicy?: Pick<RepoMeshNodePolicy, 'delegatedWorkerDangerousModeAllow'> | null,
|
|
885
|
+
): boolean {
|
|
886
|
+
if (typeof nodePolicy?.delegatedWorkerDangerousModeAllow === 'boolean') {
|
|
887
|
+
return nodePolicy.delegatedWorkerDangerousModeAllow;
|
|
888
|
+
}
|
|
889
|
+
return meshPolicy?.delegatedWorkerDangerousModeAllow === true;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
/** Shape a boolean-or-mode resolution for the settings precedence contract. */
|
|
893
|
+
export function delegatedWorkerAutoApproveSettings(
|
|
894
|
+
meshPolicy?: Pick<RepoMeshPolicy, 'delegatedWorkerAutoApprove' | 'delegatedWorkerDangerousModeAllow'> | null,
|
|
895
|
+
nodePolicy?: Pick<RepoMeshNodePolicy, 'delegatedWorkerAutoApprove' | 'delegatedWorkerDangerousModeAllow'> | null,
|
|
896
|
+
provider?: Pick<ProviderModule, 'autoApproveModes'> | null,
|
|
897
|
+
repoConfig?: RepoMeshDeclarativeConfig | null,
|
|
898
|
+
providerType?: string | null,
|
|
899
|
+
): {
|
|
900
|
+
autoApprove: boolean | undefined;
|
|
901
|
+
autoApproveMode: string | undefined;
|
|
902
|
+
delegatedWorkerDangerousModeAllow: boolean;
|
|
903
|
+
} {
|
|
904
|
+
const resolved = resolveDelegatedWorkerAutoApprove(meshPolicy, nodePolicy, provider, repoConfig, providerType);
|
|
905
|
+
const delegatedWorkerDangerousModeAllow = resolveDelegatedWorkerDangerousModeAllow(meshPolicy, nodePolicy);
|
|
906
|
+
return typeof resolved === 'string'
|
|
907
|
+
? { autoApprove: undefined, autoApproveMode: resolved, delegatedWorkerDangerousModeAllow }
|
|
908
|
+
: { autoApprove: resolved, autoApproveMode: undefined, delegatedWorkerDangerousModeAllow };
|
|
809
909
|
}
|
|
810
910
|
|
|
811
911
|
/**
|
package/src/shared-types.ts
CHANGED
|
@@ -52,7 +52,7 @@ export type { ProviderErrorReason } from './providers/provider-instance.js';
|
|
|
52
52
|
// Local import for use in Managed*Entry types below
|
|
53
53
|
import type { ActiveChatData as _ActiveChatData, ProviderErrorReason as _ProviderErrorReason } from './providers/provider-instance.js';
|
|
54
54
|
import type { WorkspaceEntry } from './config/workspaces.js';
|
|
55
|
-
import type { ProviderMeshCoordinatorConfig, ProviderResumeCapability } from './providers/contracts.js';
|
|
55
|
+
import type { AutoApproveModesConfig, ProviderMeshCoordinatorConfig, ProviderResumeCapability } from './providers/contracts.js';
|
|
56
56
|
import type {
|
|
57
57
|
GitCompactSummary,
|
|
58
58
|
GitDiffSummary,
|
|
@@ -563,6 +563,8 @@ export interface AvailableProviderInfo {
|
|
|
563
563
|
lastVerification?: MachineProviderCheckResult;
|
|
564
564
|
/** Provider-declared Repo Mesh coordinator/MCP behavior. */
|
|
565
565
|
meshCoordinator?: ProviderMeshCoordinatorConfig;
|
|
566
|
+
/** Provider-declared auto-approve choices shown by session launch UIs. */
|
|
567
|
+
autoApproveModes?: AutoApproveModesConfig;
|
|
566
568
|
/** BRAIN-ROUTING: suggested model values for the new-session model dropdown. */
|
|
567
569
|
modelOptions?: string[];
|
|
568
570
|
/** BRAIN-ROUTING: reasoning-effort values for the new-session thinking dropdown. */
|
package/src/status/snapshot.ts
CHANGED
|
@@ -145,6 +145,7 @@ export function buildAvailableProviders(
|
|
|
145
145
|
lastDetection?: AvailableProviderInfo['lastDetection'];
|
|
146
146
|
lastVerification?: AvailableProviderInfo['lastVerification'];
|
|
147
147
|
meshCoordinator?: AvailableProviderInfo['meshCoordinator'];
|
|
148
|
+
autoApproveModes?: AvailableProviderInfo['autoApproveModes'];
|
|
148
149
|
_sourceTrust?: AvailableProviderInfo['trust'];
|
|
149
150
|
_sourceLayer?: AvailableProviderInfo['sourceLayer'];
|
|
150
151
|
_sourceName?: string | null;
|
|
@@ -183,6 +184,7 @@ export function buildAvailableProviders(
|
|
|
183
184
|
...(provider.lastDetection !== undefined ? { lastDetection: provider.lastDetection } : {}),
|
|
184
185
|
...(provider.lastVerification !== undefined ? { lastVerification: provider.lastVerification } : {}),
|
|
185
186
|
...(provider.meshCoordinator !== undefined ? { meshCoordinator: provider.meshCoordinator } : {}),
|
|
187
|
+
...(provider.autoApproveModes !== undefined ? { autoApproveModes: provider.autoApproveModes } : {}),
|
|
186
188
|
...(trust ? {
|
|
187
189
|
trust,
|
|
188
190
|
trustDescription: describeTrust(trust),
|