MCPcopy Create free account
hub / github.com/tiann/hapi / updateMetadata

Method updateMetadata

cli/src/api/apiSession.ts:611–645  ·  view source on GitHub ↗
(handler: (metadata: Metadata) => Metadata)

Source from the content-addressed store, hash-verified

609 }
610
611 updateMetadata(handler: (metadata: Metadata) => Metadata): void {
612 this.metadataLock.inLock(async () => {
613 await backoff(async () => {
614 const current = this.metadata ?? ({} as Metadata)
615 const updated = handler(current)
616
617 const answer = await this.socket.emitWithAck('update-metadata', {
618 sid: this.sessionId,
619 expectedVersion: this.metadataVersion,
620 metadata: updated
621 }) as unknown
622
623 applyVersionedAck(answer, {
624 valueKey: 'metadata',
625 parseValue: (value) => {
626 const parsed = MetadataSchema.safeParse(value)
627 return parsed.success ? parsed.data : null
628 },
629 applyValue: (value) => {
630 this.metadata = value
631 },
632 applyVersion: (version) => {
633 this.metadataVersion = version
634 },
635 logInvalidValue: (context, version) => {
636 const suffix = context === 'success' ? 'ack' : 'version-mismatch ack'
637 logger.debug(`[API] Ignoring invalid metadata value from ${suffix}`, { version })
638 },
639 invalidResponseMessage: 'Invalid update-metadata response',
640 errorMessage: 'Metadata update failed',
641 versionMismatchMessage: 'Metadata version mismatch'
642 })
643 })
644 })
645 }
646
647 updateAgentState(handler: (state: AgentState) => AgentState): void {
648 this.agentStateLock.inLock(async () => {

Callers 6

resetCodexThreadMethod · 0.80
bootstrapExistingSessionFunction · 0.80
archiveAndCloseFunction · 0.80
AgentSessionBaseClass · 0.80
runClaudeFunction · 0.80

Calls 4

applyVersionedAckFunction · 0.90
handlerFunction · 0.85
inLockMethod · 0.80
debugMethod · 0.80

Tested by

no test coverage detected