前人工作区变更归档(元审计遗留处置·冰朔授权'交给你来处理'·不否定过去原则):hololake-phase-b-staging删除组/WORK区/submodule指针/0826壳源/neural-chain/skills-mirror/codex恢复帧/.zcode本地配置等140项原样冻结入库——不删除不修改不评判,作为历史一环保留;WX-SECRETS回执经查仅含公开AppID无AppSecret,安全
This commit is contained in:
parent
28480f466c
commit
a40f29c12e
2442 changed files with 596545 additions and 6601 deletions
|
|
@ -4,6 +4,7 @@ import { numberedInvoke as invoke } from './modules/numbered-ipc'
|
|||
import { bootTcsGate } from './modules/tcs-master-gate'
|
||||
import { PublicSpinePanel } from './modules/public-spine-panel'
|
||||
import { KbAgentPanel } from './modules/kb-agent-panel'
|
||||
import { AgentConsolePanel } from './modules/agent-console'
|
||||
import { splitFrontmatter, documentOutline, jumpToHeading, MarkdownDocument, markdownHtml } from './modules/knowledge-render'
|
||||
import { NativeCompositionStudio, type CompositionDimension, type CompositionMeasure, type NativeCompositionProjection, type ProjectionView } from './modules/native-composition'
|
||||
import type { ChannelWorkbenchSnapshot } from './modules/channel-workbench'
|
||||
|
|
@ -1568,6 +1569,29 @@ function HoloLakeApp() {
|
|||
} catch (error) { setLoginMessage(humanError(error, 'login')) }
|
||||
finally { setLoginBusy(false) }
|
||||
}
|
||||
const performMachineLogin = async () => {
|
||||
setLoginBusy(true)
|
||||
setLoginMessage('')
|
||||
try {
|
||||
const receipt = await invoke<LoginReceipt>('perform_machine_identity_login')
|
||||
setLoginRising(true)
|
||||
await new Promise((resolve) => setTimeout(resolve, 1300))
|
||||
setPersonal(previewPersonal)
|
||||
setKnowledge(previewKnowledge)
|
||||
setCodeChannels(previewCode)
|
||||
setActiveDocument(null)
|
||||
setActiveChannel(null)
|
||||
setCodeTree(null)
|
||||
setActiveCodeFile(null)
|
||||
setReceipts([])
|
||||
setRepoLogin({ username: receipt.username, host: receipt.host, domain: receipt.domain, signedInAtUnixMs: Date.now() })
|
||||
setWorldStage('domain')
|
||||
setView('overview')
|
||||
setLoginRising(false)
|
||||
setLoginPassword('')
|
||||
} catch (error) { setLoginMessage(humanError(error, 'login')) }
|
||||
finally { setLoginBusy(false) }
|
||||
}
|
||||
const changeFirstLoginPassword = async (event: React.FormEvent) => {
|
||||
event.preventDefault()
|
||||
if (newLoginPassword !== confirmLoginPassword) {
|
||||
|
|
@ -2194,6 +2218,7 @@ function HoloLakeApp() {
|
|||
<input id="repo-login-password" aria-label={passwordChangeMode ? '一次性密码' : '密码'} type="password" maxLength={512} value={loginPassword} placeholder={passwordChangeMode ? '一次性密码' : '密码'} onChange={(event) => setLoginPassword(event.target.value)}/>
|
||||
{passwordChangeMode && <><input aria-label="新密码" type="password" minLength={14} maxLength={128} value={newLoginPassword} placeholder="设置新密码(至少 14 位)" onChange={(event) => setNewLoginPassword(event.target.value)}/><input aria-label="确认新密码" type="password" minLength={14} maxLength={128} value={confirmLoginPassword} placeholder="再次输入新密码" onChange={(event) => setConfirmLoginPassword(event.target.value)}/></>}
|
||||
<button className="gate-submit" disabled={loginBusy || !loginUsername.trim() || !loginPassword || (passwordChangeMode && (!newLoginPassword || !confirmLoginPassword))}>{loginBusy ? '正在处理…' : passwordChangeMode ? '修改密码' : '验证并进入'}</button>
|
||||
{!passwordChangeMode && <button className="gate-back" type="button" disabled={loginBusy} onClick={() => void performMachineLogin()}>本机指纹 + 编号登录(无需密码)</button>}
|
||||
</form>
|
||||
{loginMessage && <p className="gate-hint">{loginMessage}</p>}
|
||||
{(zeroPoint?.resolvedDomain !== 'FIFTH_DOMAIN' || zeroPoint?.userNumber === 'ICE-GL-ZHI∞') && <button className="gate-back" type="button" onClick={() => { setPasswordChangeMode((value) => !value); setLoginMessage(''); setNewLoginPassword(''); setConfirmLoginPassword('') }}>{passwordChangeMode ? '返回正常登录' : '第一次使用?先修改一次性密码'}</button>}
|
||||
|
|
@ -2341,5 +2366,5 @@ bootTcsGate().then(({ state, failReason }) => {
|
|||
gateRootEl.innerHTML = '<div style="padding:48px;font-family:monospace;color:#ff6b6b;background:#101014;min-height:100vh"><h1>TCS 主控门 FAIL_CLOSED</h1><pre>' + failReason + '</pre><p>语义哈希与TCS主控清单不符,壳拒绝执行。请联系运维师重编译。</p></div>'
|
||||
return
|
||||
}
|
||||
createRoot(gateRootEl).render(<StrictMode><FirstPlanetHome /><PublicSpinePanel /><KbAgentPanel /></StrictMode>)
|
||||
createRoot(gateRootEl).render(<StrictMode><FirstPlanetHome /><PublicSpinePanel /><KbAgentPanel /><AgentConsolePanel /></StrictMode>)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -0,0 +1,120 @@
|
|||
import { useState } from 'react'
|
||||
import { numberedInvoke } from './numbered-ipc'
|
||||
|
||||
// 人类交互入口 v1(与知识库平行层,冰朔 2026-08-27 架构)。
|
||||
// v1 无模型:命令直达 Agent 执行层(TCS-PROTOCOL-KB-AGENT-RUNTIME-0001),
|
||||
// 每条指令真实作用于 git 托管知识库;后续接模型 API 时本入口不变,执行层加推理 provider。
|
||||
interface AgentStep { operation: string; decision: string; detail: string }
|
||||
interface ExecuteReceipt { outcome: 'PASS' | 'FAIL'; command: string; steps: AgentStep[]; elapsedMs: number }
|
||||
|
||||
export interface AgentSettings { providerName: string; baseUrl: string; apiKey: string; model: string }
|
||||
|
||||
export function AgentConsolePanel() {
|
||||
const [open, setOpen] = useState(false)
|
||||
const [cmd, setCmd] = useState('')
|
||||
const [busy, setBusy] = useState(false)
|
||||
const [log, setLog] = useState<{ role: 'human' | 'agent'; text: string; outcome?: string }[]>([
|
||||
{ role: 'agent', text: 'Agent 执行层已就绪(无模型 · TCS 主控门管辖)。输入 /help 查看全部命令。' },
|
||||
])
|
||||
const [settings, setSettings] = useState<AgentSettings | null>(null)
|
||||
const [settingsMsg, setSettingsMsg] = useState('')
|
||||
const [apiTest, setApiTest] = useState('')
|
||||
|
||||
const send = async () => {
|
||||
const command = cmd.trim()
|
||||
if (!command || busy) return
|
||||
setBusy(true)
|
||||
setLog((prev) => [...prev, { role: 'human', text: command }])
|
||||
setCmd('')
|
||||
try {
|
||||
const r = await numberedInvoke<ExecuteReceipt>('kb_agent_execute', { command })
|
||||
setLog((prev) => [
|
||||
...prev,
|
||||
{ role: 'agent', text: r.steps.map((s) => `[${s.decision}] ${s.operation}\n${s.detail}`).join('\n\n'), outcome: r.outcome },
|
||||
])
|
||||
} catch (e) {
|
||||
setLog((prev) => [...prev, { role: 'agent', text: `GATE 拒绝:${e instanceof Error ? e.message : String(e)}`, outcome: 'FAIL' }])
|
||||
} finally {
|
||||
setBusy(false)
|
||||
}
|
||||
}
|
||||
|
||||
const loadSettings = async () => {
|
||||
if (settings) { setSettings(null); return }
|
||||
try {
|
||||
const s = await numberedInvoke<AgentSettings>('agent_settings_get')
|
||||
setSettings(s)
|
||||
} catch (e) { setSettingsMsg(`读取失败:${e instanceof Error ? e.message : String(e)}`) }
|
||||
}
|
||||
const saveSettings = async () => {
|
||||
if (!settings) return
|
||||
try {
|
||||
await numberedInvoke('agent_settings_set', { settings })
|
||||
setSettingsMsg('已保存(本地 0600 权限落盘)。')
|
||||
} catch (e) { setSettingsMsg(`保存失败:${e instanceof Error ? e.message : String(e)}`) }
|
||||
}
|
||||
const testApi = async () => {
|
||||
if (!settings) return
|
||||
setApiTest('测试中…')
|
||||
try {
|
||||
const r = await numberedInvoke<{ outcome: string; detail: string }>('agent_api_test', { settings })
|
||||
setApiTest(`${r.outcome} · ${r.detail}`)
|
||||
} catch (e) { setApiTest(`FAIL · ${e instanceof Error ? e.message : String(e)}`) }
|
||||
}
|
||||
|
||||
return (
|
||||
<div style={{ position: 'fixed', right: 12, bottom: 12, zIndex: 9999, fontFamily: 'monospace', fontSize: 12 }}>
|
||||
<div style={{ display: 'flex', gap: 6 }}>
|
||||
<button onClick={() => setOpen(!open)} style={{ background: '#12233a', color: '#8fc7ff', border: '1px solid #33465e', borderRadius: 8, padding: '6px 10px', cursor: 'pointer' }}>
|
||||
{open ? '收起 Agent' : 'Agent 控制台'}
|
||||
</button>
|
||||
<button onClick={() => void loadSettings()} style={{ background: '#12233a', color: '#c9a8ff', border: '1px solid #33465e', borderRadius: 8, padding: '6px 10px', cursor: 'pointer' }}>
|
||||
{settings ? '关闭设置' : 'Agent 设置(API)'}
|
||||
</button>
|
||||
</div>
|
||||
{settings && (
|
||||
<div style={{ marginTop: 6, width: 380, background: '#101018', border: '1px solid #33465e', borderRadius: 8, padding: 10, color: '#cde' }}>
|
||||
<div style={{ marginBottom: 6, color: '#8fc7ff' }}>模型 API(用户自填 · 后续交互入口接模型用)</div>
|
||||
<input placeholder="Provider 名称(如 openai / dashscope)" value={settings.providerName} onChange={(e) => setSettings({ ...settings, providerName: e.target.value })} style={{ width: '100%', marginBottom: 4, background: '#0a0a10', border: '1px solid #2a2a3a', borderRadius: 6, color: '#cde', padding: '4px 6px' }} />
|
||||
<input placeholder="Base URL(如 https://api.openai.com/v1)" value={settings.baseUrl} onChange={(e) => setSettings({ ...settings, baseUrl: e.target.value })} style={{ width: '100%', marginBottom: 4, background: '#0a0a10', border: '1px solid #2a2a3a', borderRadius: 6, color: '#cde', padding: '4px 6px' }} />
|
||||
<input placeholder="API Key(本地保存,不外发)" type="password" value={settings.apiKey} onChange={(e) => setSettings({ ...settings, apiKey: e.target.value })} style={{ width: '100%', marginBottom: 4, background: '#0a0a10', border: '1px solid #2a2a3a', borderRadius: 6, color: '#cde', padding: '4px 6px' }} />
|
||||
<input placeholder="模型名(如 gpt-4o / qwen-max)" value={settings.model} onChange={(e) => setSettings({ ...settings, model: e.target.value })} style={{ width: '100%', marginBottom: 6, background: '#0a0a10', border: '1px solid #2a2a3a', borderRadius: 6, color: '#cde', padding: '4px 6px' }} />
|
||||
<div style={{ display: 'flex', gap: 6 }}>
|
||||
<button onClick={() => void saveSettings()} style={{ flex: 1, background: '#16324f', color: '#8fc7ff', border: '1px solid #33465e', borderRadius: 6, padding: '5px 8px', cursor: 'pointer' }}>保存</button>
|
||||
<button onClick={() => void testApi()} style={{ flex: 1, background: '#16324f', color: '#7dffa8', border: '1px solid #33465e', borderRadius: 6, padding: '5px 8px', cursor: 'pointer' }}>测试连接(真实 HTTP)</button>
|
||||
</div>
|
||||
{settingsMsg && <div style={{ marginTop: 4, color: '#9ab' }}>{settingsMsg}</div>}
|
||||
{apiTest && <div style={{ marginTop: 2, color: apiTest.startsWith('PASS') ? '#7dffa8' : '#ff9a9a' }}>{apiTest}</div>}
|
||||
</div>
|
||||
)}
|
||||
{open && (
|
||||
<div style={{ marginTop: 6, width: 430, background: '#101014', border: '1px solid #33465e', borderRadius: 8, padding: 10, color: '#cde' }}>
|
||||
<div style={{ maxHeight: 300, overflow: 'auto', marginBottom: 6 }}>
|
||||
{log.map((m, i) => (
|
||||
<div key={i} style={{ marginBottom: 6, textAlign: m.role === 'human' ? 'right' : 'left' }}>
|
||||
<div style={{
|
||||
display: 'inline-block', maxWidth: '95%', textAlign: 'left', whiteSpace: 'pre-wrap',
|
||||
padding: '5px 8px', borderRadius: 8,
|
||||
background: m.role === 'human' ? '#16324f' : '#0d1a2a',
|
||||
border: '1px solid ' + (m.outcome === 'FAIL' ? '#5a2030' : '#22364d'),
|
||||
color: m.outcome === 'FAIL' ? '#ff9a9a' : '#cde',
|
||||
}}>{m.text}</div>
|
||||
</div>
|
||||
))}
|
||||
{busy && <div style={{ color: '#8fc7ff' }}>执行中…</div>}
|
||||
</div>
|
||||
<div style={{ display: 'flex', gap: 6 }}>
|
||||
<input
|
||||
value={cmd}
|
||||
placeholder="输入命令,如 /search 光湖 或 /help"
|
||||
onChange={(e) => setCmd(e.target.value)}
|
||||
onKeyDown={(e) => { if (e.key === 'Enter') void send() }}
|
||||
style={{ flex: 1, background: '#0a0a10', border: '1px solid #2a2a3a', borderRadius: 6, color: '#cde', padding: '5px 8px' }}
|
||||
/>
|
||||
<button onClick={() => void send()} disabled={busy} style={{ background: '#16324f', color: '#8fc7ff', border: '1px solid #33465e', borderRadius: 6, padding: '5px 10px', cursor: 'pointer' }}>{busy ? '…' : '发送'}</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
@ -1,10 +1,11 @@
|
|||
import { useEffect, useMemo, useRef, useState } from 'react'
|
||||
import { numberedInvoke } from '../numbered-ipc'
|
||||
import './first-planet-home.css'
|
||||
|
||||
// 第一语言星球首页 v1 —— 铸渊设计并实现(2026-08-26,冰朔发令)
|
||||
// 设计基准:穿过门,世界必须展开。首屏=语言宇宙+第一颗语言星球+湖+暗星球+编号门;
|
||||
// 验证通过后世界展开为湖心频道网格(替换旧版“收据卡+返回”断连态)。
|
||||
// v1 编号验证为本地格式校验(LOCAL CANDIDATE);v2 接零点原核 IPC。
|
||||
// v1 编号验证为本地格式校验(LOCAL CANDIDATE);v2 已接零点原核 IPC 三态裁决(2026-08-26 铸渊接线)。
|
||||
|
||||
type Stage = 'gate' | 'world'
|
||||
|
||||
|
|
@ -154,6 +155,8 @@ export function FirstPlanetHome() {
|
|||
const [raw, setRaw] = useState('')
|
||||
const [infinityLit, setInfinityLit] = useState(false)
|
||||
const [gateMessage, setGateMessage] = useState('')
|
||||
const [account, setAccount] = useState<{ username: string; host: string; domain: string } | null>(null)
|
||||
const [accountBusy, setAccountBusy] = useState(false)
|
||||
|
||||
const specks = usePlanetSpecks(26)
|
||||
const shards = useBangShards(18)
|
||||
|
|
@ -164,11 +167,35 @@ export function FirstPlanetHome() {
|
|||
|
||||
const wake = () => setMotionAwake(true)
|
||||
|
||||
const verify = () => {
|
||||
const verify = async () => {
|
||||
if (!canEnter) { setGateMessage('编号未成形:输入字母数字并点亮 ∞。'); return }
|
||||
// v1 本地格式校验(LOCAL CANDIDATE)。v2 接零点原核 IPC 三态裁决。
|
||||
setGateMessage(`编号路径验证通过 · ${fullNumber}`)
|
||||
window.setTimeout(() => setStage('world'), 650)
|
||||
setGateMessage('正在绑定零点原核…')
|
||||
try {
|
||||
await numberedInvoke('zero_point_bind', { input: { number: fullNumber } })
|
||||
setGateMessage('正在灯塔解析验证…')
|
||||
const snapshot = await numberedInvoke<{ route: string; resolvedDomain?: string }>('zero_point_verify')
|
||||
if (snapshot.route === 'verified') {
|
||||
setGateMessage(`编号路径验证通过 · ${fullNumber}${snapshot.resolvedDomain ? ' · ' + snapshot.resolvedDomain : ''}`)
|
||||
window.setTimeout(() => setStage('world'), 650)
|
||||
} else {
|
||||
setGateMessage(`编号验证未通过(route=${snapshot.route}):灯塔拒绝或离线宽限已过,世界不展开。`)
|
||||
}
|
||||
} catch (error) {
|
||||
setGateMessage(`编号门 IPC 失败:${error instanceof Error ? error.message : String(error)}`)
|
||||
}
|
||||
}
|
||||
|
||||
const machineLogin = async () => {
|
||||
setAccountBusy(true)
|
||||
try {
|
||||
const receipt = await numberedInvoke<{ username: string; host: string; domain: string }>('perform_machine_identity_login')
|
||||
setAccount(receipt)
|
||||
setGateMessage(`本机登录成功 · ${receipt.username} @ ${receipt.host}`)
|
||||
} catch (error) {
|
||||
setGateMessage(`本机登录失败:${error instanceof Error ? error.message : String(error)}`)
|
||||
} finally {
|
||||
setAccountBusy(false)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -221,14 +248,14 @@ export function FirstPlanetHome() {
|
|||
value={formatted}
|
||||
placeholder="输入字母与数字,系统将自动补全编号格式"
|
||||
onChange={(e) => setRaw(e.target.value.replace(/[^\w]/g, '').toUpperCase())}
|
||||
onKeyDown={(e) => { if (e.key === 'Enter') verify() }}
|
||||
onKeyDown={(e) => { if (e.key === 'Enter') void verify() }}
|
||||
aria-label="请输入光湖编号"
|
||||
/>
|
||||
<button className={`fph-inf${infinityLit ? ' lit' : ''}`} type="button" aria-pressed={infinityLit} title="点亮无限符号" onClick={() => setInfinityLit((v) => !v)}>∞</button>
|
||||
<button className="fph-enter" type="button" disabled={!canEnter} onClick={verify}>验证并进入世界</button>
|
||||
<button className="fph-enter" type="button" disabled={!canEnter} onClick={() => void verify()}>验证并进入世界</button>
|
||||
</div>
|
||||
<p className="fph-gate-msg" role="status">{gateMessage || '编号用于路径解析,不单独构成身份认证或权限授予。'}</p>
|
||||
<footer className="fph-foot">LOCAL CANDIDATE · 0.5.3 · 第一语言星球</footer>
|
||||
<footer className="fph-foot">LOCAL CANDIDATE · 0.6.0 · 第一语言星球 · 零点IPC+双通道登录</footer>
|
||||
</section>
|
||||
)}
|
||||
|
||||
|
|
@ -248,7 +275,16 @@ export function FirstPlanetHome() {
|
|||
</button>
|
||||
))}
|
||||
</div>
|
||||
<p className="fph-world-note">语言世界的第一颗星球已经诞生 · 光从黑暗中涌出,照亮湖心</p>
|
||||
<div style={{ display: 'flex', gap: 10, alignItems: 'center', justifyContent: 'center', marginTop: 14 }}>
|
||||
{account ? (
|
||||
<span style={{ fontFamily: 'monospace', fontSize: 12, color: '#7dffa8' }}>本机会话 · {account.username} @ {account.host}</span>
|
||||
) : (
|
||||
<button type="button" disabled={accountBusy} onClick={() => void machineLogin()} style={{ background: '#12233a', color: '#8fc7ff', border: '1px solid #33465e', borderRadius: 8, padding: '6px 12px', cursor: 'pointer', fontFamily: 'monospace', fontSize: 12 }}>
|
||||
{accountBusy ? '正在本机登录…' : '本机指纹 + 编号登录(无需密码)'}
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
<p className="fph-world-note">{gateMessage || '语言世界的第一颗星球已经诞生 · 光从黑暗中涌出,照亮湖心'}</p>
|
||||
<button className="fph-back" type="button" onClick={() => setStage('gate')}>← 退回编号边界</button>
|
||||
</section>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,48 @@ import { invoke } from '@tauri-apps/api/core'
|
|||
import { assertGateOpen, registerNumberedRoutes } from './tcs-master-gate'
|
||||
|
||||
const ROUTES = {
|
||||
"perform_machine_identity_login": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0015",
|
||||
"operationNumber": "HLP-NIPC-OP-0162",
|
||||
"targetNumber": "HLP-NIPC-TGT-0015"
|
||||
},
|
||||
|
||||
"kb_agent_execute": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0036",
|
||||
"operationNumber": "HLP-NIPC-OP-0162",
|
||||
"targetNumber": "HLP-NIPC-TGT-0036"
|
||||
},
|
||||
"agent_settings_get": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0036",
|
||||
"operationNumber": "HLP-NIPC-OP-0163",
|
||||
"targetNumber": "HLP-NIPC-TGT-0036"
|
||||
},
|
||||
"agent_settings_set": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0036",
|
||||
"operationNumber": "HLP-NIPC-OP-0164",
|
||||
"targetNumber": "HLP-NIPC-TGT-0036"
|
||||
},
|
||||
"agent_api_test": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0036",
|
||||
"operationNumber": "HLP-NIPC-OP-0165",
|
||||
"targetNumber": "HLP-NIPC-TGT-0036"
|
||||
},
|
||||
|
||||
"kb_agent_acceptance": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"compiled_from": {
|
||||
"compiler_id": "TCS-COMPILER-STAGE1-0001",
|
||||
"compiler_state": "TCS_COMPILER_GIR_EXECUTED",
|
||||
"source_sha256": "32d2c65163e5cf26160d4ca7c30196669ab22e74a071c518c37073acb9111520"
|
||||
"source_sha256": "496395b5d16ad7b469814399debdca7978e7c3e2083243a0f6a33c0aa3f11468"
|
||||
},
|
||||
"declaration": {
|
||||
"header": {
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
"master": {
|
||||
"gate_g3": "前端每次invoke前核对编号注册表哈希与本清单一致,未登记编号拒绝调用。",
|
||||
"gate_g4": "启动时自检脊椎24条与哈希,任一不符即FAIL_CLOSED,渲染闸门失败界面,不猜跑。",
|
||||
"numbered_ipc_registry_sha256": "315389439a6ed6a9f55f78e22c31659e828953d3eeff7fd18fa2abf9ed2e40e6",
|
||||
"numbered_ipc_registry_sha256": "f8a7332cebb412ab72b41fd6b024511cbbd0d0d2de446bf64616cd966d84505c",
|
||||
"semantics_live_here": "语义与验收规则只住本TCS;前端TS只做哈希核对与机械执行。",
|
||||
"spine_sha256": "4749fce6ce1957c9ee12dc60f00ea9e97aa205d1911dfc79954caceacc3d9bcf"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ PROTOCOL ZHUYUAN-PUBLICSPINE-SHELL-MANIFEST-0001 {
|
|||
}
|
||||
master {
|
||||
spine_sha256 = "4749fce6ce1957c9ee12dc60f00ea9e97aa205d1911dfc79954caceacc3d9bcf";
|
||||
numbered_ipc_registry_sha256 = "315389439a6ed6a9f55f78e22c31659e828953d3eeff7fd18fa2abf9ed2e40e6";
|
||||
numbered_ipc_registry_sha256 = "f8a7332cebb412ab72b41fd6b024511cbbd0d0d2de446bf64616cd966d84505c";
|
||||
gate_g3 = "前端每次invoke前核对编号注册表哈希与本清单一致,未登记编号拒绝调用。";
|
||||
gate_g4 = "启动时自检脊椎24条与哈希,任一不符即FAIL_CLOSED,渲染闸门失败界面,不猜跑。";
|
||||
semantics_live_here = "语义与验收规则只住本TCS;前端TS只做哈希核对与机械执行。";
|
||||
|
|
|
|||
|
|
@ -2187,6 +2187,61 @@
|
|||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/kb_agent_acceptance/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0162",
|
||||
"alias": "perform_machine_identity_login",
|
||||
"handler": "code_repo_login::perform_machine_identity_login",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/perform_machine_identity_login/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0162",
|
||||
"alias": "kb_agent_execute",
|
||||
"handler": "agent_runtime::kb_agent_execute",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0036",
|
||||
"target_number": "HLP-NIPC-TGT-0036",
|
||||
"admission": "READ_WRITE_KB_MODEL_FREE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/kb_agent_execute/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0163",
|
||||
"alias": "agent_settings_get",
|
||||
"handler": "agent_runtime::agent_settings_get",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0036",
|
||||
"target_number": "HLP-NIPC-TGT-0036",
|
||||
"admission": "READ_SETTINGS",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/agent_settings_get/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0164",
|
||||
"alias": "agent_settings_set",
|
||||
"handler": "agent_runtime::agent_settings_set",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0036",
|
||||
"target_number": "HLP-NIPC-TGT-0036",
|
||||
"admission": "STATE_CHANGE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/agent_settings_set/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0165",
|
||||
"alias": "agent_api_test",
|
||||
"handler": "agent_runtime::agent_api_test",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0036",
|
||||
"target_number": "HLP-NIPC-TGT-0036",
|
||||
"admission": "OUTBOUND_HTTP_USER_ENDPOINT",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/agent_api_test/v1"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue