@ifsoul/core 0.3.0 → 0.4.0

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.
Files changed (137) hide show
  1. package/README.md +28 -34
  2. package/dist/packages/memory/src/sql.js +54 -5
  3. package/dist/packages/protocol/src/generated/validators.cjs +1 -1
  4. package/dist/packages/protocol/src/index.d.ts +1 -6
  5. package/dist/packages/protocol/src/index.js +3 -16
  6. package/dist/packages/protocol/src/types.d.ts +1 -1
  7. package/dist/packages/runtime/src/index.js +1 -1
  8. package/package.json +2 -3
  9. package/packages/protocol/schemas/current/archive.schema.json +16 -16
  10. package/packages/protocol/schemas/current/character.schema.json +21 -21
  11. package/packages/protocol/schemas/current/common.schema.json +15 -15
  12. package/packages/protocol/schemas/current/context.schema.json +24 -24
  13. package/packages/protocol/schemas/current/conversation.schema.json +39 -39
  14. package/packages/protocol/schemas/current/environment.schema.json +18 -18
  15. package/packages/protocol/schemas/current/memory.schema.json +66 -66
  16. package/packages/protocol/schemas/current/model-provider.schema.json +40 -40
  17. package/packages/protocol/schemas/current/planning.schema.json +61 -61
  18. package/packages/protocol/schemas/current/provider-common.schema.json +6 -6
  19. package/release.json +7 -12
  20. package/specs/README.md +3 -86
  21. package/specs/current/README.md +3 -5
  22. package/specs/current/examples/archive-fork.json +12 -12
  23. package/specs/current/examples/archive-resume.json +12 -12
  24. package/specs/current/examples/character-instance.json +1 -1
  25. package/specs/current/examples/character-template.json +1 -1
  26. package/specs/current/examples/context-after-inspection.json +1 -1
  27. package/specs/current/examples/context-chat.json +1 -1
  28. package/specs/current/examples/context-daily.json +1 -1
  29. package/specs/current/examples/context-no-speech.json +1 -1
  30. package/specs/current/examples/conversation-delivery.json +1 -1
  31. package/specs/current/examples/conversation-live-request.json +1 -1
  32. package/specs/current/examples/conversation-live-response.json +1 -1
  33. package/specs/current/examples/conversation-no-speech-request.json +1 -1
  34. package/specs/current/examples/conversation-no-speech-response.json +1 -1
  35. package/specs/current/examples/conversation-requested-request.json +1 -1
  36. package/specs/current/examples/conversation-requested-response.json +1 -1
  37. package/specs/current/examples/environment-chat.json +1 -1
  38. package/specs/current/examples/environment-game.json +1 -1
  39. package/specs/current/examples/environment-no-speech.json +1 -1
  40. package/specs/current/examples/intent-checkpoint.json +1 -1
  41. package/specs/current/examples/memory-episode.json +1 -1
  42. package/specs/current/examples/memory-event-conversation.json +1 -1
  43. package/specs/current/examples/memory-event-observed.json +2 -2
  44. package/specs/current/examples/memory-event-plan-proposal.json +2 -2
  45. package/specs/current/examples/memory-event-proposed.json +2 -2
  46. package/specs/current/examples/memory-fact.json +1 -1
  47. package/specs/current/examples/memory-relationship.json +1 -1
  48. package/specs/current/examples/memory-working-context.json +1 -1
  49. package/specs/current/examples/plan-cancel-request.json +1 -1
  50. package/specs/current/examples/plan-cancel-result.json +1 -1
  51. package/specs/current/examples/plan-daily.json +1 -1
  52. package/specs/current/examples/plan-partial-decision.json +1 -1
  53. package/specs/current/examples/portable-memory.jsonl +9 -9
  54. package/specs/current/examples/task-outcome.json +1 -1
  55. package/specs/current/examples/task-progress.json +1 -1
  56. package/specs/current/model-provider/examples/capabilities.json +1 -1
  57. package/specs/current/model-provider/examples/error.json +1 -1
  58. package/specs/current/model-provider/examples/request.json +1 -1
  59. package/specs/current/model-provider/examples/response.json +1 -1
  60. package/docs/npm-publishing.md +0 -44
  61. package/packages/protocol/schemas/action-result.schema.json +0 -187
  62. package/packages/protocol/schemas/action.schema.json +0 -68
  63. package/packages/protocol/schemas/archive-manifest.schema.json +0 -126
  64. package/packages/protocol/schemas/capability.schema.json +0 -131
  65. package/packages/protocol/schemas/character-instance.schema.json +0 -73
  66. package/packages/protocol/schemas/character-template.schema.json +0 -67
  67. package/packages/protocol/schemas/common.schema.json +0 -154
  68. package/packages/protocol/schemas/derived-memory.schema.json +0 -145
  69. package/packages/protocol/schemas/memory-event.schema.json +0 -123
  70. package/packages/protocol/schemas/model-provider.schema.json +0 -326
  71. package/packages/protocol/schemas/perception.schema.json +0 -89
  72. package/packages/protocol/schemas/permission-policy.schema.json +0 -153
  73. package/packages/protocol/schemas/v0.2/archive.schema.json +0 -205
  74. package/packages/protocol/schemas/v0.2/character.schema.json +0 -344
  75. package/packages/protocol/schemas/v0.2/common.schema.json +0 -239
  76. package/packages/protocol/schemas/v0.2/context.schema.json +0 -230
  77. package/packages/protocol/schemas/v0.2/conversation.schema.json +0 -340
  78. package/packages/protocol/schemas/v0.2/environment.schema.json +0 -244
  79. package/packages/protocol/schemas/v0.2/memory.schema.json +0 -495
  80. package/packages/protocol/schemas/v0.2/planning.schema.json +0 -443
  81. package/packages/protocol/schemas/world-event.schema.json +0 -74
  82. package/specs/character/README.md +0 -84
  83. package/specs/character/examples/archive-manifest.json +0 -32
  84. package/specs/character/examples/character-instance.json +0 -20
  85. package/specs/character/examples/character-template.json +0 -19
  86. package/specs/memory/README.md +0 -80
  87. package/specs/memory/examples/derived-memory.json +0 -21
  88. package/specs/memory/examples/memory-event.json +0 -35
  89. package/specs/model-provider/README.md +0 -85
  90. package/specs/model-provider/examples/capabilities.json +0 -10
  91. package/specs/model-provider/examples/error.json +0 -18
  92. package/specs/model-provider/examples/request.json +0 -17
  93. package/specs/model-provider/examples/response.json +0 -19
  94. package/specs/v0.2/README.md +0 -421
  95. package/specs/v0.2/examples/archive-fork.json +0 -64
  96. package/specs/v0.2/examples/archive-resume.json +0 -63
  97. package/specs/v0.2/examples/character-instance.json +0 -57
  98. package/specs/v0.2/examples/character-template.json +0 -45
  99. package/specs/v0.2/examples/context-after-inspection.json +0 -44
  100. package/specs/v0.2/examples/context-chat.json +0 -27
  101. package/specs/v0.2/examples/context-daily.json +0 -69
  102. package/specs/v0.2/examples/context-no-speech.json +0 -27
  103. package/specs/v0.2/examples/conversation-delivery.json +0 -17
  104. package/specs/v0.2/examples/conversation-live-request.json +0 -31
  105. package/specs/v0.2/examples/conversation-live-response.json +0 -23
  106. package/specs/v0.2/examples/conversation-no-speech-request.json +0 -23
  107. package/specs/v0.2/examples/conversation-no-speech-response.json +0 -22
  108. package/specs/v0.2/examples/conversation-requested-request.json +0 -31
  109. package/specs/v0.2/examples/conversation-requested-response.json +0 -23
  110. package/specs/v0.2/examples/environment-chat.json +0 -43
  111. package/specs/v0.2/examples/environment-game.json +0 -80
  112. package/specs/v0.2/examples/environment-no-speech.json +0 -47
  113. package/specs/v0.2/examples/intent-checkpoint.json +0 -29
  114. package/specs/v0.2/examples/memory-episode.json +0 -28
  115. package/specs/v0.2/examples/memory-event-conversation.json +0 -32
  116. package/specs/v0.2/examples/memory-event-observed.json +0 -50
  117. package/specs/v0.2/examples/memory-event-plan-proposal.json +0 -82
  118. package/specs/v0.2/examples/memory-event-proposed.json +0 -53
  119. package/specs/v0.2/examples/memory-fact.json +0 -23
  120. package/specs/v0.2/examples/memory-relationship.json +0 -25
  121. package/specs/v0.2/examples/memory-working-context.json +0 -24
  122. package/specs/v0.2/examples/plan-cancel-request.json +0 -16
  123. package/specs/v0.2/examples/plan-cancel-result.json +0 -21
  124. package/specs/v0.2/examples/plan-daily.json +0 -57
  125. package/specs/v0.2/examples/plan-partial-decision.json +0 -28
  126. package/specs/v0.2/examples/portable-memory.jsonl +0 -9
  127. package/specs/v0.2/examples/task-outcome.json +0 -21
  128. package/specs/v0.2/examples/task-progress.json +0 -19
  129. package/specs/world-adapter/README.md +0 -114
  130. package/specs/world-adapter/examples/action-result-unknown.json +0 -23
  131. package/specs/world-adapter/examples/action-result.json +0 -45
  132. package/specs/world-adapter/examples/action.json +0 -17
  133. package/specs/world-adapter/examples/capability.json +0 -44
  134. package/specs/world-adapter/examples/perception.json +0 -30
  135. package/specs/world-adapter/examples/permission-decision.json +0 -14
  136. package/specs/world-adapter/examples/permission-policy.json +0 -17
  137. package/specs/world-adapter/examples/world-event.json +0 -25
@@ -1,80 +0,0 @@
1
- # Memory contracts
2
-
3
- Historical v0.1 contract. See [v0.2](../v0.2/README.md) for the current design;
4
- the v0.1 JSON examples remain unchanged for regression checks.
5
-
6
- A Memory Event records what a source supplied to an observer, with provenance.
7
- It is not a universally true fact. A Derived Memory is replaceable interpretation
8
- or indexing data built from raw events; it never replaces them automatically.
9
- Neither format grants permission or acts as a trusted instruction.
10
-
11
- | Document | Required fields beyond `schemaVersion`, `kind` |
12
- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
13
- | Memory Event | `eventId`, `characterId`, `worldId`, `sessionId`, `source`, `observerId`, `recordedAt`, `worldTime`, `scope`, `payload`, `provenance` |
14
- | Derived Memory | `memoryId`, `characterId`, `createdAt`, `scope`, `sourceEventIds`, `derivation`, `payload` |
15
-
16
- A source has `sourceId`, `kind` (`world-adapter`, `runtime`, `user`, or `import`),
17
- and a nonnegative `sequence`. Sequence is ordered only within that source's
18
- world/session stream; duplicates or regressions require explicit reconciliation.
19
- `recordedAt` is wall-clock recording time; `worldTime` is the separately named
20
- world timeline and tick. Neither defines global order across sources. Importers
21
- MUST preserve original source/provenance rather than manufacture fresh historical
22
- truth or treat equal ticks from different timelines as comparable.
23
-
24
- An event payload has an opaque `type` and open object `data`; interpreting that
25
- data requires a known payload contract. `provenance.eventIds` and
26
- `provenance.worldEventIds` are unique ID arrays, empty when no source references
27
- exist. A future consumer checks identity, accessible references, source-local
28
- sequence ordering, and consistency with the character/world mapping. Optional
29
- `confidence` lies in `[0,1]`; it is a source-supplied score, not a calibrated
30
- probability, consensus, or permission.
31
-
32
- ## Access and export scope
33
-
34
- Every event, derived record, world event, and observation item has a `scope`:
35
- `audience`, `subjectIds`, and `export`.
36
-
37
- - `private` requires exactly one subject ID: the intended subject.
38
- - `participants` requires at least one explicit subject ID and exposes data only
39
- to those subjects under trusted policy.
40
- - `public` requires an empty subject list. It describes world-audience visibility,
41
- not permission to publish player data on the Internet.
42
-
43
- These list/cardinality relationships are semantic checks in this baseline.
44
- Subject IDs use the record's world/session context; a derived record resolves
45
- subjects through its source events. If source contexts differ, trusted identity
46
- mapping and a scope no broader than every source's access are required; without
47
- that mapping the derivation MUST be rejected. A string copied from an imported
48
- record is never sufficient proof of identity.
49
-
50
- `export` is `allowed`, `consent-required`, or `forbidden`. Access and export are
51
- separate decisions: visibility does not imply export consent. `allowed` remains
52
- subject to actual authorization; `consent-required` needs verifiable consent;
53
- `forbidden` is excluded. Filtering MUST report losses without exposing withheld
54
- payloads. Scope enforcement and consent verification are not schema checks.
55
-
56
- ## Derived records
57
-
58
- `sourceEventIds` is a nonempty unique array. `derivation` requires `algorithmId`
59
- and `algorithmVersion`, plus `modelId` when a model contributed. Payloads are
60
- explicit variants:
61
-
62
- | `payload.type` | Fields |
63
- | -------------- | ----------------------------------------------------------- |
64
- | `fact` | `text` |
65
- | `relationship` | `subjectId`, `relation`, `objectId`, optional `description` |
66
- | `summary` | `text` |
67
- | `embedding` | Nonempty numeric `vector` |
68
-
69
- A fact is a derived claim; a relationship is not consent. Embedding model,
70
- preprocessing, and dimensional compatibility MUST be recorded by the derivation
71
- identity/version and checked before use. Derived records can be regenerated
72
- when algorithms change. Source data remains available until explicit authorized
73
- deletion; summaries do not justify silent source deletion. Deleting or losing
74
- access to source events requires deleting or recomputing dependent derived
75
- records and indexes. Retention of older backups needs a separate policy.
76
-
77
- The [event](examples/memory-event.json) refers to the synthetic watering world
78
- event; the [summary](examples/derived-memory.json) derives from that event.
79
- Storage, querying, deletion propagation, cross-world mapping, and derivation
80
- execution are not implemented.
@@ -1,21 +0,0 @@
1
- {
2
- "schemaVersion": "draft-0.1.0",
3
- "kind": "derived-memory",
4
- "memoryId": "summary-1",
5
- "characterId": "character-mira",
6
- "createdAt": "2026-01-01T12:00:00Z",
7
- "scope": {
8
- "audience": "private",
9
- "subjectIds": ["actor-mira"],
10
- "export": "allowed"
11
- },
12
- "sourceEventIds": ["memory-event-1"],
13
- "derivation": {
14
- "algorithmId": "synthetic-summary",
15
- "algorithmVersion": "1"
16
- },
17
- "payload": {
18
- "type": "summary",
19
- "text": "Mira observed that the watering action completed."
20
- }
21
- }
@@ -1,35 +0,0 @@
1
- {
2
- "schemaVersion": "draft-0.1.0",
3
- "kind": "memory-event",
4
- "eventId": "memory-event-1",
5
- "characterId": "character-mira",
6
- "worldId": "garden",
7
- "sessionId": "session-1",
8
- "source": {
9
- "sourceId": "garden-recorder",
10
- "kind": "runtime",
11
- "sequence": 1
12
- },
13
- "observerId": "actor-mira",
14
- "recordedAt": "2026-01-01T12:00:00Z",
15
- "worldTime": {
16
- "timelineId": "garden-day-1",
17
- "tick": 20
18
- },
19
- "scope": {
20
- "audience": "private",
21
- "subjectIds": ["actor-mira"],
22
- "export": "allowed"
23
- },
24
- "payload": {
25
- "type": "observed-action-result",
26
- "data": {
27
- "actionId": "action-water-1",
28
- "status": "success"
29
- }
30
- },
31
- "provenance": {
32
- "eventIds": [],
33
- "worldEventIds": ["world-event-water-1"]
34
- }
35
- }
@@ -1,85 +0,0 @@
1
- # ModelProvider contract
2
-
3
- This provider boundary remains independently versioned at `draft-0.1.0` while
4
- the [character/environment design](../v0.2/README.md) advances to v0.2. A provider
5
- performs inference; an external AgentController is a separately planned runtime
6
- strategy, not a synonym for a provider or permission to execute game commands.
7
-
8
- ModelProvider is a planned boundary for structured model input/output,
9
- capability declaration, usage, cancellation/deadlines, and safe errors. It is
10
- independent of a vendor, SDK, game, cloud account, and transport. This bootstrap
11
- contains no model client or inference implementation and does not require a key.
12
-
13
- The [model-provider schema](../../packages/protocol/schemas/model-provider.schema.json)
14
- is a tagged union. Every variant requires `schemaVersion` and `kind`:
15
-
16
- | `kind` | Required additional fields |
17
- | ----------------------- | -------------------------------------------------------------------------------------------- |
18
- | `provider-capabilities` | `providerId`, `modelId`, `toolCalling`, `structuredOutput`, `cancellation`, `usage` |
19
- | `model-request` | `requestId`, `providerId`, `modelId`, `messages`, `toolChoice`, `outputFormat`, `deadlineAt` |
20
- | `model-response` | `requestId`, `providerId`, `modelId`, `recordedAt`, `status`, `output`, `finishReason` |
21
- | `model-error` | `requestId`, `providerId`, `modelId`, `recordedAt`, `error` |
22
-
23
- Capabilities apply to the exact `providerId` + `modelId`. `toolCalling: false`
24
- requires requests to omit tools or use an empty array with `toolChoice: "none"`.
25
- `structuredOutput: false` requires `outputFormat: "text"`. Unsupported features
26
- MUST be rejected explicitly, never silently removed or emulated as a claimed
27
- native guarantee. `usage` indicates whether usage can be reported; omission
28
- means unknown, never zero. Local rules strategies do not need to pretend to be
29
- model providers.
30
-
31
- Requests contain a nonempty `messages` array of `{ role, content }` where role is
32
- `system`, `user`, `assistant`, or `tool`. Optional assistant `toolCalls` contain
33
- `toolCallId`, `name`, and object `arguments`; tool-result messages reference a
34
- `toolCallId`. Tool calls belong only to assistant messages, tool results require
35
- a prior matching call, and non-tool messages MUST omit `toolCallId`. These are
36
- semantic checks, not enforced by the enclosing schema. Context selection and
37
- trust placement are application responsibilities; untrusted memory/tool text
38
- MUST NOT become trusted system instructions.
39
-
40
- Optional tool definitions contain `name`, `description`, and `argumentsSchema`.
41
- Names and call IDs MUST be unique in their respective request/response context.
42
- Arguments schemas require separate safe meta-validation and argument validation.
43
- `toolChoice` is `none`, `auto`, or `required`; `required` needs at least one tool.
44
- `outputFormat` is `text` or `json-object`; for the latter, a consumer MUST parse
45
- and verify `output.text` as a JSON object. It does not imply a particular domain
46
- schema. Optional `maxOutputTokens` requests a provider-supported output bound;
47
- there is no context-window or billing guarantee. Unsupported limits are rejected.
48
-
49
- `deadlineAt` is UTC scheduling time. Optional `cancellationId` correlates a
50
- future transport's cancellation signal; the schema does not implement the signal
51
- or define a wire message. `cancellation` is explicitly `unsupported` or
52
- `best-effort`. Best effort can stop waiting/generation where supported but cannot
53
- promise rollback, no usage, no billing, or that an upstream request never ran.
54
- Unsupported cancellation MUST be reported by capabilities and checked before use.
55
-
56
- A response's `output` contains `text` and `toolCalls` (possibly empty). Status is
57
- `completed`, `incomplete`, or `cancelled`. Future consumers MUST enforce these
58
- semantic combinations: completed uses finish reason `stop` or `tool-calls`;
59
- incomplete uses `length`; cancelled uses `cancelled`. `tool-calls` requires
60
- nonempty calls supported by the selected tools; `stop` has no pending tool calls.
61
- Partial/cancelled output MUST NOT trigger execution automatically. A model tool
62
- call is a proposal; it must become a separately validated, authorized world
63
- Action before execution.
64
-
65
- Responses and errors correlate `requestId`, `providerId`, and `modelId` to the
66
- request. Usage optionally contains nonnegative `inputTokens`, `outputTokens`,
67
- and `estimated`; estimates MUST stay labelled and omitted counts MUST NOT be
68
- fabricated. No currency, pricing, or normalized cost contract is defined. Usage
69
- may be present on failure or cancellation.
70
-
71
- Errors use `code`, safe `message`, `retry`, and optional `retryAfterMs`. Examples
72
- of codes are `unsupported-feature`, `invalid-request`, `rate-limited`,
73
- `unavailable`, `deadline-exceeded`, and `cancelled`; codes are extensible opaque
74
- IDs, so callers handle unknown codes conservatively. Never include credentials,
75
- raw private prompts, or upstream secrets in errors. A retry hint is not an
76
- idempotency guarantee: a timed-out provider request may have consumed usage and
77
- a repeated request may generate different output or another charge. Preserve
78
- request provenance and apply local budgets before a retry. Rules decisions can
79
- be reproducible; replay of recorded output reproduces that fixture; live model
80
- responses are not promised deterministic across models or versions.
81
-
82
- Positive synthetic examples: [capabilities](examples/capabilities.json),
83
- [request](examples/request.json), [response](examples/response.json),
84
- [error](examples/error.json). Response and error are alternative outcomes, not
85
- two mandatory messages. No hidden model reasoning is required or stored.
@@ -1,10 +0,0 @@
1
- {
2
- "schemaVersion": "draft-0.1.0",
3
- "kind": "provider-capabilities",
4
- "providerId": "synthetic-provider",
5
- "modelId": "fixture-model",
6
- "toolCalling": false,
7
- "structuredOutput": false,
8
- "cancellation": "unsupported",
9
- "usage": true
10
- }
@@ -1,18 +0,0 @@
1
- {
2
- "schemaVersion": "draft-0.1.0",
3
- "kind": "model-error",
4
- "requestId": "request-1",
5
- "providerId": "synthetic-provider",
6
- "modelId": "fixture-model",
7
- "recordedAt": "2026-01-01T12:00:00Z",
8
- "error": {
9
- "code": "deadline-exceeded",
10
- "message": "No complete response was received before the deadline.",
11
- "retry": "same-request"
12
- },
13
- "usage": {
14
- "inputTokens": 13,
15
- "outputTokens": 0,
16
- "estimated": true
17
- }
18
- }
@@ -1,17 +0,0 @@
1
- {
2
- "schemaVersion": "draft-0.1.0",
3
- "kind": "model-request",
4
- "requestId": "request-1",
5
- "providerId": "synthetic-provider",
6
- "modelId": "fixture-model",
7
- "messages": [
8
- {
9
- "role": "user",
10
- "content": "Describe the visible garden plant in one sentence."
11
- }
12
- ],
13
- "toolChoice": "none",
14
- "outputFormat": "text",
15
- "deadlineAt": "2026-01-01T12:00:05Z",
16
- "maxOutputTokens": 32
17
- }
@@ -1,19 +0,0 @@
1
- {
2
- "schemaVersion": "draft-0.1.0",
3
- "kind": "model-response",
4
- "requestId": "request-1",
5
- "providerId": "synthetic-provider",
6
- "modelId": "fixture-model",
7
- "recordedAt": "2026-01-01T12:00:00Z",
8
- "status": "completed",
9
- "output": {
10
- "text": "A small plant stands beside the path.",
11
- "toolCalls": []
12
- },
13
- "finishReason": "stop",
14
- "usage": {
15
- "inputTokens": 13,
16
- "outputTokens": 10,
17
- "estimated": true
18
- }
19
- }