c7ce44d963
Workstream A–C substrate for the Ten31 agentic system: - A1: docs/crm-overview.md; CLAUDE.md conventions + guardrail #9 - A2: additive/reversible core migration (canonical_entities, entity_links, interaction_log, relationship_edges, soft-delete) + ledgered runner - B1/B3: chunking + deterministic entity resolution (backend/ingest) - B2: dense (bge-m3) + BM25 sparse ingest to Qdrant crm_chunks - C: CRM MCP server (reads, retrieval modes, logged writes) — no outbound tools - docs: redaction/re-hydration, Gmail enablement runbook - synthetic test data; .env.example; housekeeping (.gitignore, untrack crm.db, drop legacy files + start9/0.3.5) Verified end-to-end on synthetic data + live Sparks (hybrid > dense on entity queries). Real backfill runs on Ten31 infra; index holds synthetic data only. Branch snapshot also captures pre-existing working-tree changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
34 lines
936 B
TypeScript
34 lines
936 B
TypeScript
import { i18n } from './i18n'
|
|
import { sdk } from './sdk'
|
|
import { DATA_MOUNT_PATH, IMAGE_ID, WEB_PORT } from './utils'
|
|
|
|
export const main = sdk.setupMain(async ({ effects }) => {
|
|
console.info(i18n('Starting Ten31 Database'))
|
|
|
|
return sdk.Daemons.of(effects).addDaemon('primary', {
|
|
subcontainer: await sdk.SubContainer.of(
|
|
effects,
|
|
{ imageId: IMAGE_ID },
|
|
sdk.Mounts.of().mountVolume({
|
|
volumeId: 'main',
|
|
subpath: null,
|
|
mountpoint: DATA_MOUNT_PATH,
|
|
readonly: false,
|
|
}),
|
|
'ten31-database-main',
|
|
),
|
|
exec: {
|
|
command: ['/usr/local/bin/docker_entrypoint.sh'],
|
|
},
|
|
ready: {
|
|
display: i18n('Web Interface'),
|
|
fn: () =>
|
|
sdk.healthCheck.checkPortListening(effects, WEB_PORT, {
|
|
successMessage: i18n('CRM API is responding.'),
|
|
errorMessage: i18n('CRM API is not responding.'),
|
|
}),
|
|
},
|
|
requires: [],
|
|
})
|
|
})
|